试试这样的...
db.address.aggregate([
{
$replaceRoot: {
newRoot: { _id: "$_id", source: {$objectToArray: "$$ROOT"}}
}
},
{
$lookup: {
from: "address1",
localField: "_id",
foreignField: "_id",
as: "target"
}
},
{
$replaceRoot: {
newRoot: { _id: "$_id", source: "$source", target : {$objectToArray: { $first : "$target"}}}
}
},
{
$replaceRoot: {
newRoot: { _id: "$_id", source: { $setDifference: ["$source","$target"]}, target: { $setDifference: ["$target","$source"]}}
}
}
]);
如果集合在同一个数据库中,并且具有相同的“_id”,这将起作用。它可以很容易地修改以加入其他标准。
输出看起来像这样..
{ "_id" : ObjectId("5f8dc3abc6ff46000f023970"), "source" : [ { "k" : "postal_code", "v" : "" }, { "k" : "phone", "v" : "" } ], "target" : [ { "k" : "postal_code", "v" : null }, { "k" : "phone", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023971"), "source" : [ { "k" : "postal_code", "v" : "" }, { "k" : "phone", "v" : "" } ], "target" : [ { "k" : "postal_code", "v" : null }, { "k" : "phone", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023972"), "source" : [ { "k" : "postal_code", "v" : "" } ], "target" : [ { "k" : "postal_code", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023973"), "source" : [ { "k" : "postal_code", "v" : "" } ], "target" : [ { "k" : "postal_code", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023974"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023975"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023976"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023977"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023978"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023979"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f02397a"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f02397b"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f02397c"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f02397d"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f02397e"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f02397f"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023980"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023981"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023982"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023983"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
Type "it" for more