2014-10-13 5 views
2

Мне нужно объединить две коллекции в одну, но мне нужно поместить документ только в том случае, если он не существует в первой коллекции. Как мне это сделать? Каков наилучший способ? Я видел что-то о agregation и mapreduce, но я не уверен, что использовать. Не могли бы вы мне помочь?Объединить две коллекции на mongodb

+0

Заканчивать этот вопрос http://stackoverflow.com/questions/9696940/merging-two-collections-in-mongodb – blackmind

ответ

1

Это самый простой подход грубой силы, который приходит мне на ум.

Ниже, users - это коллекция, в которую вы собираетесь скопировать документы от users2. Я предполагаю, что _id является ключом слияния.

use test; 

db.users.insert({_id: 1, name: 'Mickey'}); 
db.users.insert({_id: 2, name: 'Minney'}); 

db.users2.insert({_id: 1, name: 'Donald'}); 
db.users2.insert({_id: 2, name: 'Daisy'}); 
db.users2.insert({_id: 3, name: 'Pluto'}); 

var users2 = db.users2.find(); 
while (users2.hasNext()) { 
    var u2 = users2.next(); 
    var u = db.users.findOne({'_id': u2._id}); 
    if (u == null) { 
    db.users.insert(u2); 
    } 
} 

Mickey и Minnie будут сохранены и будут добавлены только Pluto к users.

2

Я думаю, что для этого нет автоматического способа. Предположим, у вас 2 коллекции для слияния, c1 и c2 Вы можете вручную выполнить слияние с

db.c1.find().forEach(function(item) { 
    db.c2.insert(item); 
    db.c1.remove(item); 
}); 

и должны быть осторожны с этим, потому что Монго не поддерживает мульти-документ-транзакции

Смежные вопросы