2017-02-28 54 views
0

我有兩個地址集合。收集#1包含客戶的姓名和地址以及唯一標識符。如果唯一標識符匹配,將信息從一個文檔添加到另一個文檔

收集#2包含相同的所述唯一標識符和客戶的電話號碼。

收集#2與電話號碼小於收集#1。

我現在想要做的是讓MongoDB僅在唯一標識符匹配的情況下,將Collection#2的電話號碼添加到Collection#1中的匹配文檔。否則,它應該跳過文檔並轉到下一個文檔。最後,我需要收集#2的電話號碼或沒有號碼,如果它不在那裏。

有沒有簡單的方法來做到這一點?

+0

使用[$查找](https://docs.mongodb.com/manual/reference/operator/aggregation/lookup /) – Veeram

+0

請舉一些例子。 – gba

回答

4

有兩種方法可以解決這個問題:

  1. 如果您正在使用MongoDB的3.2版本,並進一步可以使用$lookup聚集。

    db.address1.aggregate([ 
    { 
        $lookup: 
        { 
         from: "address2", 
         localField: "unique_field_name", 
         foreignField: "unique_field_name", 
         as: "telephone" 
        } 
    }]) 
    

運行此聚集將增加地址1從地址2匹配的文檔作爲嵌入文檔。即使地址2中沒有匹配的文檔,它也會將此嵌入文檔添加到地址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}}) 
    }) 
    
  • 相關問題