[英]Finding a nested object in an array of object using mongoose
{
_id: new ObjectId("61da0ab855483312e8f4483b"),
products: [
{
createdAt: 2022-01-08T22:05:44.635Z,
_id: new ObjectId("61da0ab855483312e8f4483c"),
productCode: 'otf',
productName: 'facebookmeta',
claims: [Array],
permissions: []
},
{
createdAt: 2022-01-08T22:05:44.635Z,
_id: new ObjectId("61da0ab855483312e8f4483f"),
productCode: '4pf',
productName: 'twitteroauth',
claims: [Array],
permissions: [Array]
}
],
__v: 0
}
现在,我一直在尝试使用 find() 和 findOne 方法从该数组中仅获取一个 object ,但没有任何运气。 如果我在某些条件下通过,它仍然会最终给我一个包含两个对象的数组。 我只想能够动态传递属于数组中单个 object 的条件并检索该 object
MongoDB 正在对集合应用查询条件并返回结果与匹配的文档。 由于twitteroauth和facebookmeta两个产品都是同一文档的一部分,因此将返回整个匹配文档。
如果您只需要文档中的单个匹配条目,则可以使用 MongoDB 聚合管道(带有 $unwind),您可以在其中修改结果集。
例如:
db.collection_name.aggregate([
{
"$match": {
// pass matching criteria/conditions here
}
},
{
"$unwind": "$products" //to deconstruct products field in the result
},
{
"$match": {
"products.productName": "twitteroauth"
}
}
])
请注意,第二个匹配条件用于在解构的结果集上添加其他匹配条件/条件,以便可以过滤产品。
这将为您提供如下结果:-
{
_id: new ObjectId("61da0ab855483312e8f4483b"),
products: {
createdAt: 2022-01-08T22:05:44.635Z,
_id: new ObjectId("61da0ab855483312e8f4483f"),
productCode: '4pf',
productName: 'twitteroauth',
claims: [Array],
permissions: [Array]
},
__v: 0
}
参考: https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.