我有两个地址集合。集合#1包含客户的名称和地址以及唯一标识符。
集合#2包含相同的所述唯一标识符和客户的电话号码。
集合#2的电话号码小于集合#1。
我现在要做的是,只有当唯一标识符匹配时,MongoDB才会将Collection#2中的电话号码添加到Collection#1中的匹配文档中。否则它应该跳过文档并转到下一个文档。最后,我需要收集#2的电话号码或没有电话号码,如果它不在那里。
有没有简单的方法可以做到这一点?
答案 0 :(得分:4)
有两种方法可以解决这个问题:
如果您使用的是mongoDB 3.2版,则可以使用$lookup聚合。
db.address1.aggregate([
{
$lookup:
{
from: "address2",
localField: "unique_field_name",
foreignField: "unique_field_name",
as: "telephone"
}
}])
运行此聚合会将address2中匹配的文档作为嵌入文档添加到address1。即使地址2中没有匹配的文档,它也会将此嵌入文档添加到address1中的所有文档中。
第二个选项是运行以下脚本:
db.address2.find().forEach(
function(address2){
var doc = db.address1.findOne({"unique_identifier":address2.unique_identifier})
db.address1.update({_id: doc._id}, {$set: {telephone: address2. telephone}})
})