我有一个名为
我想要更新
当我硬编码值时,我能够编写单个更新脚本。但是,当使用数组并使用forEach循环解析它时,我无法使更新脚本正常工作。请问有人可以解释如何做到这一点吗?
所以,我从一个名为
我想更新
我猜这与foreach循环中的语法有关,但我不确定具体是什么。能否有人解释一下如何做到这一点?
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已经更改为销售编号为17917的记录):
{
"_id" : ObjectId("551816b02eecf1238b3baadb"),
"saleNumber" : NumberInt(17917),
"saleDetails" : {
"amountOwed" : 300.0,
}
}
我想更新
properties.saleDetails.amountOwed
的值,使其与newProperties.saleDetails.amountOwed
相匹配,条件是saleNumbers相同。
以下是我编写的查询:
newActiveProperties.forEach(function(doc) {
db.properties.update(
{
"saleNumber": doc.saleNumber
, "auction": ObjectId("56fbf3a8d4c6fe5d73af67c9")
},
{
$set: { "saleDetails.amountOwed": doc.saleDetails.amountOwed}
},
{
multi: true
});
});
当它运行时,什么都不会发生。结果选项卡中没有结果(我正在使用Mongo Chef),也没有记录被更新。
如果我直接编写销售编号和应付金额,我可以使其正常工作:
db.properties.update(
{
"saleNumber": "17917"
, "auction": ObjectId("56fbf3a8d4c6fe5d73af67c9")
},
{
$set: { "saleDetails.amountOwed": 2000}
},
{
multi: true
});
我猜这与foreach循环中的语法有关,但我不确定具体是什么。能否有人解释一下如何做到这一点?