Mongodb$查找对象/文档数组
myMongodb$查找对象/文档数组,mongodb,aggregation-framework,lookup,Mongodb,Aggregation Framework,Lookup,myorders集合的文档架构如下所示: { "_id" : ObjectId("Id of this record"), "location_data" : { "type" : "main", "location_id" : ObjectId("this location's id") }, "item_details" : [ { "item_id" : ObjectId("this item'
orders
集合的文档架构如下所示:
{
"_id" : ObjectId("Id of this record"),
"location_data" : {
"type" : "main",
"location_id" : ObjectId("this location's id")
},
"item_details" : [
{
"item_id" : ObjectId("this item's id"),
"qty" : 950
},
{
"item_id" : ObjectId("this item's id"),
"qty" : 200
}
]
}
我将项
存储在另一个集合中,其架构如下所示:
{
"_id": ObjectId("this record's id"),
"title": "this item's title",
"description": "this item's description"
}
我期望的结果是:
{
"_id" : ObjectId("Id of this record"),
"location_data" : {
"type" : "main",
"location_id" : ObjectId("this location's id")
},
"item_details" : [
{
"title": "this item's title",
"item_id" : ObjectId("this item's id"),
"qty" : 950
},
{
"title": "this item's title",
"item_id" : ObjectId("this item's id"),
"qty" : 200
}
]
}
在Mongodb文档中,我没有找到任何可以处理对象数组的东西。任何帮助都是值得的
谢谢尝试以下聚合查询:
db.orders.aggregate([
{$unwind : "$item_details"}, // Since the item_details is an array, unwind it first
{$lookup: // run the $lookup to join with `items` collections
{
from: "items",
localField: "item_details.item_id",
foreignField: "_id",
as: "item_detailsTemp"
}
},
{
$addFields: { "item_details" : { $mergeObjects: [ { $arrayElemAt: [ "$item_detailsTemp", 0 ] }, "$item_details" ] } } // Replace the existing item_details with new information
},
{
$group : { // Since you've ran the $unwind at early stage, group it to make the item_details as an array again
"_id" : "$_id",
"location_data" : {$first : "$location_data"},
"item_details" : {$push : "$item_details"}}
}
])
// Voila! Hope this helps!