2017-02-23 16 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

1つのドキュメントを参照しますか?クエリでは 'var project'で複数の値を取得している可能性があるので –

答えて

0

私はあなたに約束のコールバックの問題があるようです。

オプション1:次の2つの方法でそれを解決することができ

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

オプション2:例えば、最初の関数のコールバック中にあなたのデータ復帰の依存する関数を入れての復帰を待ち完了を見つける:

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

私の答えはあなたを助け願っています。

関連する問題