如果唯一标识符匹配,则从一个文档添加信息到另一个文档

时间:2017-02-28 15:02:00

标签: mongodb

我有两个地址集合。集合#1包含客户的名称和地址以及唯一标识符。

集合#2包含相同的所述唯一标识符和客户的电话号码。

集合#2的电话号码小于集合#1。

我现在要做的是,只有当唯一标识符匹配时,MongoDB才会将Collection#2中的电话号码添加到Collection#1中的匹配文档中。否则它应该跳过文档并转到下一个文档。最后,我需要收集#2的电话号码或没有电话号码,如果它不在那里。

有没有简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:4)

有两种方法可以解决这个问题:

  1. 如果您使用的是mongoDB 3.2版,则可以使用$lookup聚合。

    db.address1.aggregate([
    {
        $lookup:
        {
          from: "address2",
          localField: "unique_field_name",
          foreignField: "unique_field_name",
          as: "telephone"
        }
    }])
    
  2. 运行此聚合会将address2中匹配的文档作为嵌入文档添加到address1。即使地址2中没有匹配的文档,它也会将此嵌入文档添加到address1中的所有文档中。

    1. 第二个选项是运行以下脚本:

      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}})
      })