【发布时间】:2019-09-17 01:11:27
【问题描述】:
我想知道一个查询,在该查询中我可以使用它的 ObjectId 获取特定的子文档,或者如果更容易的话,甚至可以使用它的“存储”名称——使用聚合方法。我很确定我可以使用 $project,但我不确定如何将它应用到 ObjectId。
我可以使用 find 方法,但我需要它在一个聚合方法中,所以 mongo 将返回给我项目的名称,而不是它的 ObjectId。
db.stores.aggregate([
{$unwind: '$inventory'},
{$lookup: {
from: 'items',
localField: 'inventory.item',
foreignField: '_id',
as: 'itemsData'
}},
{$unwind: '$itemsData'},
{$group:{
_id: "$_id",
inventory: { $push: "$inventory" },
itemsData: { $push: "$itemsData" }
}}
]).pretty()
我的商店收藏中有五家商店。此查询返回所有五个文档,如下面的代码,仅返回五次。但我想指定要使用它的 ObjectId 返回的商店。
{
"_id" : ObjectId("5cc0d6ad1ea502abb28b52cc"),
"inventory" : [
{
"item" : ObjectId("5cbe70bd1ea502abb28b52a4"),
"amount" : 9
},
{
"item" : ObjectId("5cbe70bd1ea502abb28b52a1"),
"amount" : 5
},
{
"item" : ObjectId("5cbe70bd1ea502abb28b52a7"),
"amount" : 2
},
{
"item" : ObjectId("5cbe70bd1ea502abb28b529e"),
"amount" : 5
}
],
"itemsData" : [
{
"_id" : ObjectId("5cbe70bd1ea502abb28b52a4"),
"item" : "beans",
"price" : NumberDecimal("53,75")
},
{
"_id" : ObjectId("5cbe70bd1ea502abb28b52a1"),
"item" : "bananas",
"price" : NumberDecimal("5.00")
},
{
"_id" : ObjectId("5cbe70bd1ea502abb28b52a7"),
"item" : "watermelon",
"price" : NumberDecimal("3.50")
},
{
"_id" : ObjectId("5cbe70bd1ea502abb28b529e"),
"item" : "broccoli",
"price" : NumberDecimal("5.50")
}
]
}
我希望查询返回代码,就像上面的代码一样,只有一个商店而不是五个。如果它适合这项任务,我不确定如何使用 $project。
【问题讨论】:
标签: mongodb aggregation document-database