Mongo版本:3.2.8
我的样本json如下
我提取name
等于apple
的查询无法正常工作。
db.collection.find( { "products.foods.name": "apple" } )
相反,它取出所有记录,奇怪吗?
$ eq,$ lt或$ gt也不起作用。它们是整个数据的结果。
db.aggregation.find( { "products.foods.min_price": {$eq:10} } )
提前致谢。
答案 0 :(得分:1)
如果您的整个文档都在_id中,那么如果查询与db.collection.find( { "products.foods.name": "apple" } )
匹配,即使它是食物数组中的文档,也会显示整个文档,这样您也可以获得其他成果。
解决第一个使用聚合管道的第一次使用$unwind将食物数组分解为单个文档,然后使用$match。
请参阅此post,这是一个类似的问题,我已在该帖子中详细解答了这些步骤。
答案 1 :(得分:0)
试试这个:
db.test.aggregate([
{$match: {'products.foods.name': 'apple'}}])
取自Retrieve only the queried element in an object array in MongoDB collection
您可以尝试该帖子中的其他示例。
答案 2 :(得分:0)
试试这个:db.Exercise.aggregate([
{$match: {'products.foods.min_price': 10}}])
答案 3 :(得分:0)
解决方案是n $unwind
两个阵列。
db.foods.aggregate([
{ $unwind : "$products" },
{ $unwind : "$products.foods" },
{ $match : { "products.foods.min_price": 10 }}
])