蒙戈发现功能不匹配

问题描述:

蒙戈版本:3.2.8蒙戈发现功能不匹配

我的样品JSON是如下

enter image description here

我的查询来获取name等于apple不起作用。

db.collection.find({ "products.foods.name": "apple" }) 

取而代之的是取所有的记录,奇怪吗?

$ eq,$ lt或$ gt都不起作用。他们的结果与整个数据。

db.aggregation.find({ "products.foods.min_price": {$eq:10} }) 

在此先感谢。

+1

正如其他人已经告诉你的那样,匹配文档的一部分将返回完整的文档,除非您采取像使用聚合框架这样的特殊措施。但是,由于您似乎将食品条目视为单个记录,并希望它们能够单独从该查询中返回,我的猜测是您对mongo中的文档有一个相当根本的误解。您发布的JSON看起来像是一个文档来保存它的所有内容,大约等于将关系数据库中的所有数据都写入单行。考虑每个条目的食物和个人文档的单独收集。 – mtj

的解决方案是为n $unwind两个阵列。

db.foods.aggregate([ 
    { $unwind : "$products" }, 
    { $unwind : "$products.foods" }, 
    { $match : { "products.foods.min_price": 10  }} 
]) 

试试这个:

db.test.aggregate([ 
    {$match: {'products.foods.name': 'apple'}}]) 

Retrieve only the queried element in an object array in MongoDB collection

两者可以尝试从该职位其他例子。

如果您的整个文档都在_id中,那么即使它是食物数组中的文档,查询匹配db.collection.find({ "products.foods.name": "apple" })也会显示整个文档,以便您也可以获得其他水果。

要解决此问题,首先使用$unwind聚合管道将食品数组分解为单个文档,然后使用$match

请参阅post,这是一个类似的问题,我已经在那篇文章中详细地回答了步骤。

尝试使用此:db.Exercise.aggregate([ {$match: {'products.foods.min_price': 10}}])