2017-02-23 146 views
0

我想如果有可能更新集合中的所有文檔的字段引用另一個文檔。我曾嘗試與下面的代碼來做到這一點:MongoDB - 更新字段引用另一個文檔

var project = db.Project.find({slug:"engine"}); 

db.Activity.update({}, {$set:{'project':DBRef("Project", project._id, "mydb")}}); 

當我看到活動的文件,在「項目」字段,結果是:

{ 
    _id: ObjectId("..."), 
    "project": DBRef("Project", undefined, "mydb") 
} 

有沒有辦法做到這是否正確?

在此先感謝。

+0

NoSQL數據庫(MongoDB)的目的是在集合,數據庫或文檔之間沒有關係。 –

+0

感謝您的評論@AnnaJeanine。我知道這不是目的,但我需要這樣做,因爲我無法控制的原因。 – Airam

+0

好的。你想參考一個單一的文件嗎?因爲在查詢中你可能已經在'var project'中獲得了多個值。 –

回答

0

對我來說,你有承諾回調問題。

方案一:您可以通過兩種方式解決這個問題將取決於第一個函數的回調中的數據返回的功能,例如:

db.Project.find({slug:"engine"}, function(error, data) { 
    db.activity.update(...data.Id...); 
}); 

選項二:等待的回報發現要完成:

var project = db.Project.find({slug:"engine"}); 

project.then(function(error,data) { 
     db.activity.update(...project.Id...); 
}); 

兩者都應該工作。問題是,當你第一次打電話時,它會返回一個承諾,而不是價值本身。如果你對這個話題作出混亂,你可以看看:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

希望我的回答幫你。