9

ユーザー コレクションの色を Car コレクションにコピーしたいと考えています。ユーザーIDである外部キーを使用しています。

> db.test1.User.find()
{ "_id" : ObjectId("515f7db83f71d6bcb1c41a48"), "age" : 33, "Color" : "blue" }
{ "_id" : ObjectId("515f7dc03f71d6bcb1c41a49"), "age" : 52, "Color" : "red" }
{ "_id" : ObjectId("515f7dc43f71d6bcb1c41a4a"), "age" : 43, "Color" : "yellow" }


> db.test2.Car.find()
{ "_id" : ObjectId("515f84883f71d6bcb1c41a54"), "speed" : 291, "userID" : ObjectId("515f7db83f71d6bcb1c41a48") }
{ "_id" : ObjectId("515f84883f71d6bcb1c41a55"), "speed" : 202, "userID" : ObjectId("515f7db83f71d6bcb1c41a49") }
{ "_id" : ObjectId("515f84883f71d6bcb1c41a56"), "speed" : 193, "userID" : ObjectId("515f7db83f71d6bcb1c41a4a") }

これが私のクエリです

db.test1.User.find().forEach( 
function(x)
{
  db.test2.Car.update( { userID: x._id }, { $set: { color: x.color} } ) 
} );

この結果が欲しい:

> db.test2.Car.find()
{ "_id" : ObjectId("515f84883f71d6bcb1c41a54"), "speed" : 291, "userID" : ObjectId("515f7db83f71d6bcb1c41a48"), "color" : "blue" }
{ "_id" : ObjectId("515f84883f71d6bcb1c41a55"), "speed" : 202, "userID" : ObjectId("515f7db83f71d6bcb1c41a49"), "color" : "red" }
{ "_id" : ObjectId("515f84883f71d6bcb1c41a56"), "speed" : 193, "userID" : ObjectId("515f7db83f71d6bcb1c41a4a"), "color" : "yellow" }

ご協力いただきありがとうございます !

4

2 に答える 2

6

テストのセットアップにはいくつかの問題があります。

  • フィールド名の大文字と小文字が一致しません (コピーcolorの代わりに参照しています)Color
  • ターゲット コレクション内で一致する外部キーの例は 1 つだけです。ObjectId('515f7db83f71d6bcb1c41a48')
  • 更新は、「外部キー」に最初に一致するドキュメントにのみ影響します。これは 1 対 1 の関係では問題ありませんが、1 対多の関係では問題ありません

上記を考慮して修正された例 (一致しないキーは別として):

db.test1.User.find().forEach( 
    function(x) {
        db.test2.Car.update(
            // query 
            { userID: x._id },

            // update 
            { $set: { color: x.Color} },

            // options:
            { "multi" : true } // Update all matching documents
        );
    }
);

{color:blue}サンプルドキュメントで実際に一致する唯一の外部キーの設定になります。

db.test2.Car.find()
{
    "_id" : ObjectId("515f84883f71d6bcb1c41a55"),
    "speed" : 202,
    "userID" : ObjectId("515f7db83f71d6bcb1c41a49")
}
{
    "_id" : ObjectId("515f84883f71d6bcb1c41a56"),
    "speed" : 193,
    "userID" : ObjectId("515f7db83f71d6bcb1c41a4a")
}
{
    "_id" : ObjectId("515f84883f71d6bcb1c41a54"),
    "color" : "blue",
    "speed" : 291,
    "userID" : ObjectId("515f7db83f71d6bcb1c41a48")
}
于 2013-04-08T02:08:44.910 に答える