Mongodb-在对象Array上使用find()方法只返回第一个匹配,而不是全部

问题描述:

与其他问题不同,有人问他们只想返回一个项目。我有一个项目返回,我需要数组中的所有匹配对象返回。然而,与我的查询匹配的第二个对象正被完全忽略。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://*.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和成本字段。我完全相信没有什么可行的,我不能够感谢你。 –

第一ü可以通过这个查询

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