mongo发现功能不匹配

时间:2016-11-10 12:20:48

标签: mongodb aggregation-framework

Mongo版本: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} } )

提前致谢。

4 个答案:

答案 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        }}
])