テストの設定にはいくつかの問題があります:
- フィールド名のケースが一致しません(
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")
}