Javascript 如何查询Mongoose嵌套数据?(猫鼬/快车)

Javascript 如何查询Mongoose嵌套数据?(猫鼬/快车),javascript,reactjs,mongodb,express,mongoose,Javascript,Reactjs,Mongodb,Express,Mongoose,我想从我的猫鼬数据收集中查询物品数据。我只需要用户“456”项“4”的“stocked”布尔值,但在我的示例中查询时,我会收到整个用户对象 数据: 数据=[{ 用户标识:“123”, 项目:[{ 项目:“2”, 库存:假 }, { 项目:“3”, 库存:对 }, { …更多项目 } ], }, { 用户标识:“456”, 项目:[{ 项目:“1”, 库存:对 }, { 项目:“4”, 库存:对 }, { …更多项目 } ], }, { …更多用户 } ]使用聚合管道,您可以使用$elemMat

我想从我的猫鼬数据收集中查询物品数据。我只需要用户“456”项“4”的“stocked”布尔值,但在我的示例中查询时,我会收到整个用户对象

数据:

数据=[{
用户标识:“123”,
项目:[{
项目:“2”,
库存:假
},
{
项目:“3”,
库存:对
},
{
…更多项目
}
],
},
{
用户标识:“456”,
项目:[{
项目:“1”,
库存:对
},
{
项目:“4”,
库存:对
},
{
…更多项目
}
],
},
{
…更多用户
}

]
使用聚合管道,您可以使用$elemMatch或$unwind

运算符将查询结果中字段的内容限制为仅包含与$elemMatch条件匹配的第一个元素

Data.aggregate([
 {$match: {userId: "456", "items.item": "4"}},
 {$project: { items: { $elemMatch: { "items.item": "4"} }}}
]);

将返回满足您的条件的所有元素

Data.aggregate([
 {$match: {userId: "456", "items.item": "4"}},
 {$unwind: "$items"},
 {$match: { "items.item": "4"} }
])

我知道我可以使用点符号来访问其中的库存值,但我希望完全使用mongoose查询。谢谢。嘿,非常感谢你@Haniel Baez!第一个选项不起作用,因此我对它进行了研究,发现您可能无法在聚合函数中使用$elemMatch:。除此之外,第二个选项确实满足了我的需要。有趣的是,当返回时,它仍然在对象中保留userId:“456”。下面是我的回答:{userId:“456”,item:“4”,stocked:true},效果很好,但我仍然希望只得到响应{item:“4”,stocked:true}。有趣的是,Data.aggregate([{$match:{userId:“456”,“items.item:“4”})与第二种方法的效果一样,您可以添加$projection状态,从结果中删除用户ID;类似这样的-->{$project:{userId:0,item:1,stocked:1}