2015-12-19 6 views
0

У меня есть две коллекции: ссылки и дети.MongoDB Shell: Как обновить коллекцию из коллекции

ссылки имеет значения, как это:

> db.links.find().pretty() 
{ "_id" : ObjectId("567374999df36aeeda6f2a5f"), "EID" : 1, "CID" : 1 } 

{ "_id" : ObjectId("567374999df36aeeda6f2a60"), "EID" : 1, "CID" : 3 } 

{ "_id" : ObjectId("567374999df36aeeda6f2a61"), "EID" : 2, "CID" : 5 } 

детей значения, как это:

{ 
     "_id" : ObjectId("567382709df36aeeda6f2a7e"), 
     "CID" : 2, 
     "Cname" : "Mo", 
     "Age" : 11 
} 
{ 
     "_id" : ObjectId("567382709df36aeeda6f2a7f"), 
     "CID" : 3, 
     "Cname" : "Adam", 
     "Age" : 13 
} 
{ 
     "_id" : ObjectId("567382709df36aeeda6f2a80"), 
     "CID" : 4, 
     "Cname" : "Eve", 
     "Age" : 21 
} 

Похоже, это должно добавить EID для детей, где ИДС матчи между звеньями и детьми, но это делает ничего.

db.children.find().forEach(function (doc1) { 
    var doc2 = db.links.find({ id: doc1.CID }); 
    if (doc2.CID == doc1.CID) { 
     doc1.EID = doc2.EID; 
     db.children.save(doc1); 
    } 
}); 

Это устанавливает значение ид у детей до значения Ид из ссылок, где значение ИДС у детей == 14.

db.children.find().forEach(function (doc1) { 
    var doc2 = db.links.find({},{_id: 0, CID: 1}); 
    if (doc1.CID == 14) { 
     doc1.EID = doc1.CID; 
     db.children.save(doc1); 
    } 
}); 

{ 
     "_id" : ObjectId("567382709df36aeeda6f2a8a"), 
     "CID" : 14, 
     "Cname" : "George II", 
     "Age" : 12, 
     "EID" : 14 
} 

Так, кажется, что операция равенства в Javascript (doc2.CID == doc1.CID) не работает. Почему это не будет работать? Я предполагаю, что у меня синтаксис неправильный или я использую неправильную операцию или оператор равенства?

+0

является 'CID' уникальным в' коллекции links'? – styvane

ответ

0
var doc2 = db.links.find({ id: doc1.CID }); 

doc2 здесь находится курсор, а не сам документ. Поэтому вам нужно пройти через документы в курсоре.

Попробуйте следующий код:

db.children.find().forEach(function (doc1) {  
    var doc2 = db.links.find({CID:doc1.CID}).forEach(function(doc2){ 
     doc1.EID = doc2.EID; 
     db.children.save(doc1); 
    }) 
}) 
+0

Спасибо, Владимир! Это работает! –

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