python - mongodb:查询列表中的值(而不是对象)

标签 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 循环来迭代记录并检查列表是否包含元素,但我更喜欢在有元素时进行查询。

由于它是一个列表而不是对象列表,所以似乎我无法使用 $elemMatch...

谢谢

最佳答案

您有几个选择:

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

db.collection.find({"vitamins":"A1"}, {"fruit":1, "vitamins.$":1})

选项 2:如果您希望能够匹配数组中的多个元素,您可以查看 aggregation framework :

db.collection.aggregate([{$unwind:"$vitamins"}, {$match:{"vitamins":"A1"}}])

关于python - mongodb:查询列表中的值(而不是对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23500666/

相关文章:

python - 如何将 SHAP 本地解释导出到数据框?

javascript - 如何将对象数组插入MongoDb集合

python - 为什么 db.insert(dict) 在使用 pymongo 时将 _id 键添加到 dict 对象

javascript - 带有索引范围变量数组的 AngularJS 动态模板

python - 我们可以在 pandas 的 iloc 中使用 contains 属性吗?

python - 解析错误

node.js - 如何更新 Mongoose 模型嵌套数组中的数字

ruby-on-rails - MongoDB 的最佳分析/数据可视化库

mongodb - 从 mongodb 中的其他集合创建一个新集合

python - 如何在 pymongo/python 中使用集合创建 for 循环?