我在合并对象时遇到麻烦,我有一个工厂模式,其中包含一个汽车属性,其中包含每辆汽车的引用,我想将工厂与最近注册的汽车合并。我有以下数据。
"Factory": {
_id: ""
"factories" : [
{
"Adress" : "...",
"name": "Factory A"
"car": [ ObjectId("5f974ac1200b1aa93fee248b") ]
},
{
"Adress" : "...",
"name": "Factory B"
"car": [ ObjectId("5f974ac1200b1aa93fee248b") ]
}
],
},
汽车收藏:
"Car" :
_id: ObjectId("5f974ac1200b1aa93fee248b")
"color" : "...",
"feature": "..."
},
我期望的输出:
[
{
"Factory A": {
"Adress" : "...",
"name": "Factory A"
"cars": {
_id: ObjectId("5f974ac1200b1aa93fee248b")
"color" : "...",
"feature": "..."
}
},
"Factory B": {
"Adress" : "...",
"name": "Factory B"
"car": {
_id: ObjectId("5f974ac1200b1aa93fee248b")
"color" : "...",
"feature": "..."
}
},
}
]
我得到的输出:
"Factory A": {
{
"Adress" : "...",
"name": "Factory A",
"car": [ ObjectId("5f974ac1200b1aa93fee248b") ]
},
"car": {
_id: ObjectId("5f974ac1200b1aa93fee248b")
"color" : "...",
"feature": "..."
}
}
"Factory B": {
{
"Adress" : "...",
"name": "Factory B",
"car": [ ObjectId("5f974ac1200b1aa93fee248b") ]
},
"car": {
_id: ObjectId("5f974ac1200b1aa93fee248b")
"color" : "...",
"feature": "..."
}
}
这是我的操作
db.getCollection('factory').aggregate([
{ $match: { "_id": ObjectId("5f9740f38591d84413600db0") } },
{ $unwind: "$factories"},
{ $group: { _id: null, allFactories: { $addToSet: "$factories"} } },
{ $unwind: "$allFactories" },
{
$lookup: {
from: "cars",
localField: "allFactories.car",
foreignField: "_id",
as: "cars"
}
},
{ $sort: { "cars._id": -1 } },
{ $unwind: "$cars" },
{ $group: {_id:"$allFactories.name", lastMatch: { $last: "$$ROOT"} }}
对这种方法有什么帮助吗?
答案 0 :(得分:0)