Python mongodb:查询列表中的值(非对象)

Python mongodb:查询列表中的值(非对象),python,mongodb,pymongo,mongodb-query,Python,Mongodb,Pymongo,Mongodb Query,我有一个数据库,里面有 {_id: 5, fruit: 'apple', vitamins: ['B1', 'B12', 'A1'] } {_id: 7, fruit: 'appricot', vitamins: ['B6', 'D12', 'A1'] } 是否有办法查询所有含有维生素“A1”的记录 我正在寻找一个mongo shell查询和一个pymongo等价物。 我知道我可以放置一个for循环来迭代记录并检查列表是否包含元素,但是如果有元素,我更喜欢查询 因为它是一个列表而不是对

我有一个数据库,里面有

{_id: 5,
 fruit: 'apple',
 vitamins: ['B1', 'B12', 'A1']
}
{_id: 7,
 fruit: 'appricot',
 vitamins: ['B6', 'D12', 'A1']
}
是否有办法查询所有含有维生素“A1”的记录

我正在寻找一个mongo shell查询和一个pymongo等价物。 我知道我可以放置一个for循环来迭代记录并检查列表是否包含元素,但是如果有元素,我更喜欢查询

因为它是一个列表而不是对象列表,所以我似乎不能使用$elemMatch


谢谢

您有两个选择:

选项1:如果只想匹配一个元素,可以在投影中使用索引

db.collection.find({"vitamins":"A1"}, {"fruit":1, "vitamins.$":1})
选项2:如果希望能够匹配阵列中的多个元素,可以查看:


db.collection.find({“维生素”:“A1”})
这样的简单查找查询应该可以正常工作。你试过了吗?我当然试过了,它不起作用。。。通过您编写的查询,我希望得到含有
维生素的记录:“A1”
,确切地说是“A1”,仅此而已。明白了。您有2个选项:1)在投影中使用索引,如
db.collection.find({“vitains”:“A1”},{“fruit”:1,“vitains.$”:1})
2)聚合框架谢谢@Anand!尝试了选项1,效果很好。仍然需要阅读更多关于聚合框架的内容,我还没有完全理解它。
db.collection.aggregate([{$unwind:"$vitamins"}, {$match:{"vitamins":"A1"}}])