2013-09-05 72 views
0

我有兩個我想合併的集合。 MapReduce的感覺有點大材小用所以我想是這樣的:在沒有mapReduce的情況下合併mongodb中的兩個集合...?

// setup 
use testdb 
db.users.remove(); 
db.profiles.remove(); 
db.users.save({email: "[email protected]", a: "a"}); 
db.profiles.save({email: "[email protected]", b: "b"}); 

// merge it 
db.users.find().forEach(
    function(user) { 
    print("updating user " + user.email); 
    db.profiles.find({email: user.email}).forEach(function(profile) { 
     for(field in profile) { 
      if(profile.hasOwnProperty(field) && !(field in user)) { 
       db.users.update({_id: user._id}, { $set : { field : profile[field] } }); 
      } 
     } 
    }); 
    } 
); 
db.users.find().pretty(); 

當然,這是因爲「場」破不評價,但只是JSON字段名。我想做更新而不是保存。我吮吸js,所以我的問題只是:我如何評估字段名稱,以便我可以在$ set需要的json對象中使用它?

回答

0

啊,好的。 []語法當然有效:

db.users.find().forEach(
    function(user) { 
    print("updating user " + user.email); 
    db.profiles.find({email: user.email}).forEach(function(profile) { 
     for(field in profile) { 
      if(profile.hasOwnProperty(field) && !(field in user)) { 
       var setObj = {}; 
       setObj[field] = profile[field]; 
       db.users.update({_id: user._id}, { $set : setObj }); 
      } 
     } 
    }); 
    } 
); 
相關問題