簡體   English   中英

MongoDB Shell:如何從集合更新集合

[英]MongoDB Shell: How to Update a Collection from a Collection

我有兩個集合:鏈接和子集。

鏈接的值如下:

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

似乎應該在鏈接和子級之間CID匹配的子級上添加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);
    }
});

這會將子代中的EID值設置為來自子代中CID值== 14的鏈接的EID值。

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)無法正常工作。 為什么不起作用? 我假設我的語法錯誤或使用了錯誤的相等運算符或運算符?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM