2017-10-11 47 views
0

與其他問題不同,有人問他們只想返回一個項目。我有一個項目返回,我需要數組中的所有匹配對象返回。然而,與我的查詢匹配的第二個對象正被完全忽略。Mongodb-在對象Array上使用find()方法只返回第一個匹配,而不是全部

這是該項目集合中的項目之一是這樣的:

 { 
     name: "soda", 
     cost: .50, 
     inventory: [ 
      { flavor: "Grape", 
       amount: 8 }, 
      { flavor: "Orange", 
       amount: 4 }, 
      { flavor: "Root Beer", 
       amount: 15 } 
     ] 
    } 

下面是我輸入到蒙戈外殼查詢:

Items.find({"inventory.amount" : { $lte : 10} } , { name : 1, "inventory.$.flavor" : 1}) 

這裏是結果:

"_id" : ObjectId("59dbe33094b70e0b5851724c"), 
    "name": "soda" 
    "inventory" : [ 
      { "flavor" : "Grape", 
      "amount" : 8, 
      } 
    ] 

這就是我想讓它迴歸我的地方:

"_id" : ObjectId("59dbe33094b70e0b5851724c"), 
    "name": "soda" 
    "inventory" : [ 
      { "flavor" : "Grape", 
      "amount" : 8 
      }, 
      { "flavor" : "Orange", 
      "amount" : 4 
      } 
    ] 

我是mongo的新手,很想熟悉它。我已經閱讀了文檔,但找不到解決方案,儘管我很可能忽略了它。我真的很喜歡一些幫助。提前致謝。

+1

的可能的複製[只檢索MongoDB中集合的對象數組中的元素查詢(https://stackoverflow.com/questions/3985214/retrieve得到您的結果-only-query-element-in-an-object-array-in-mongodb-collection) – Veeram

+0

使用'Items.aggregate({addFields:{{0}}} {inventory:{$ filter:{ input:'$ ' }} }} ])''' – Veeram

+0

哇,我嘗試了它的殼,它的工作。你所用的比我迄今所學的更先進,所以我必須弄清楚每個部分的含義。唯一的問題是我在哪裏將我的投影放在代碼中?我告訴它的部分不要返回id和成本字段。我完全相信沒有什麼可行的,我不能夠感謝你。 –

回答

0

第一ü可以通過這個查詢

db.Items.find({"inventory.amount" : { $lte : 10} } , { name : 1, "inventory.flavor" : 1 , "inventory.amount" : 1}) 
相關問題