我有一个名为 properties
的MongoDB集合和一个名为 newProperties
的集合中的另一个新数据集合 .
我想更新 properties
中的单个字段(amountOwed),其中 newProperties
中的新值表示两个表中saleNumber相同的所有记录 .
当我对值进行硬编码时,我已经能够编写单个更新脚本 . 在使用数组然后使用forEach循环解析它时,我无法使更新脚本正常工作 . 有人可以解释如何做到这一点?
所以我从一个名为 properties
的集合开始,看起来像这样(我只包括相关的字段):
{
"_id" : ObjectId("551816b02eecf1238b3baadb"),
"saleNumber" : NumberInt(17917),
"saleDetails" : {
"amountOwed" : 266.0,
}
}
{
"_id" : ObjectId("551816b02eecf1238b3baadc"),
"saleNumber" : NumberInt(851400070),
"saleDetails" : {
"amountOwed" : 270.0,
}
}
我导入一个名为 newProperties
的新集合,看起来像这样(请注意amountOwed已更改为salesNumber 17917的记录):
{
"_id" : ObjectId("551816b02eecf1238b3baadb"),
"saleNumber" : NumberInt(17917),
"saleDetails" : {
"amountOwed" : 300.0,
}
}
我想要的是使用 newProperties.saleDetails.amountOwed
中salesNumbers匹配的值更新 properties.saleDetails.amountOwed
.
这是我写的查询:
newActiveProperties.forEach(function(doc) {
db.properties.update(
{
"saleNumber": doc.saleNumber
, "auction": ObjectId("56fbf3a8d4c6fe5d73af67c9")
},
{
$set: { "saleDetails.amountOwed": doc.saleDetails.amountOwed}
},
{
multi: true
});
});
当它运行时,没有任何反应 . 结果选项卡中没有结果(我使用的是Mongo Chef)并且没有任何记录得到更新 .
如果我硬编码saleNumber和amountOwed,我可以让它工作:
db.properties.update(
{
"saleNumber": "17917"
, "auction": ObjectId("56fbf3a8d4c6fe5d73af67c9")
},
{
$set: { "saleDetails.amountOwed": 2000}
},
{
multi: true
});
我猜这与foreach循环中的语法有关,但我不确定它是什么 . 有人可以解释如何做到这一点?