2016-11-10 65 views
0

蒙戈版本: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

回答

0

的解決方案是爲n $unwind兩個陣列。

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

如果您的整個文檔都在_id中,那麼即使它是食物數組中的文檔,查詢匹配db.collection.find({ "products.foods.name": "apple" })也會顯示整個文檔,以便您也可以獲得其他水果。

要解決此問題,首先使用$unwind聚合管道將食品數組分解爲單個文檔,然後使用$match

請參閱post,這是一個類似的問題,我已經在那篇文章中詳細地回答了步驟。

0

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