Python 查询MongoDB文档的所有字段

Python 查询MongoDB文档的所有字段,python,mongodb,Python,Mongodb,我正在寻找一种方法来查询集合中的值“a”,而不必指定字段。理想情况下,应该是 import pymongo client = pymongo.MongoClient(host='localhost', port=27017) db = client['db'] collection = db['foo'] data = [{ # doc 1 'foo': 'x', 'bar': 'y', 'baz': 'z'

我正在寻找一种方法来查询集合中的值“a”,而不必指定字段。理想情况下,应该是

import pymongo

client = pymongo.MongoClient(host='localhost', port=27017)
db = client['db']
collection = db['foo']

data = [{           # doc 1

        'foo': 'x',
        'bar': 'y',
        'baz': 'z'

        },

        {
                    # doc 2
        'foo': 'a',
        'bar': 'b',
        'baz': 'c'

        },

        {           # doc 3

        'foo': 'd',
        'bar': 'a',
        'baz': 'e'

        }]

result = collection.insert_many(data)
…其中,
“*”
表示应查询所有字段,并返回上述示例代码中的文档2和文档3


我可以解决这个问题,但我希望有一种方法可以完全通过Mongo命令来实现,以保持代码简洁。我已经阅读了Mongo的文档,但只能查询与特定字段匹配的示例,而不能查询任何字段。

因此我认为您需要一个索引来实现这一点:

创建索引后:

cursor = collection.find({'*': 'a'})
你可以这样搜索它

db.collection.createIndex( { "$**": "text" } ) #taken from docs

希望对您有所帮助

此解决方案使用文本搜索功能。这需要在所有要作为文本索引搜索的字段上创建一个复合索引。在下面的示例集合中,集合
srch3
的字段
fld1
fld2
fld3

一,。样本收集:

二,。创建文本索引:

三,。查询:

返回具有
\u id
2
5
的文档

db.srch3.find( { $text: { $search: "ora" } } )
返回具有
\u id
=
5

db.srch3.find( { $text: { $search: "cus" } } )
返回具有
\u id
3
1
的文档

db.srch3.find( { $text: { $search: "ban" } } )
没有匹配的文档



解决方案#2

这是一个变通解决方案。为集合中的每个文档创建一个包含所有字段值的数组的虚拟附加字段;e、 例如,
foo_bar_baz
,如下例所示。查询此新字段

db.srch3.find( { $text: { $search: "gas" } } )

查询:

{ _id: 1,
   'foo':'x',
   'bar':'y',
   'baz':'z',
   'foo_bar_baz': [ 'x', 'y', 'z' ]
},
{ _id: 2,
   'foo':'a',
   'bar':'b',
   'baz':'c',
   'foo_bar_baz': [ 'a', 'b', 'c' ]
},
{ _id: 3,
   'foo':'d',
   'bar':'a',
   'baz':'e',
   'foo_bar_baz': [ 'd', 'a', 'e' ]
}
查询返回两个具有
\u id
2
3
的文档。

注意:这将要求应用程序将字段值与
foo\u bar\u baz
字段保持同步

db.srch3.find( { $text: { $search: "ban" } } )
db.srch3.find( { $text: { $search: "gas" } } )
{ _id: 1,
   'foo':'x',
   'bar':'y',
   'baz':'z',
   'foo_bar_baz': [ 'x', 'y', 'z' ]
},
{ _id: 2,
   'foo':'a',
   'bar':'b',
   'baz':'c',
   'foo_bar_baz': [ 'a', 'b', 'c' ]
},
{ _id: 3,
   'foo':'d',
   'bar':'a',
   'baz':'e',
   'foo_bar_baz': [ 'd', 'a', 'e' ]
}
db.srch1.find( { foo_bar_baz: 'a' } )