我有一个名为 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循环中的语法有关,但我不确定它是什么 . 有人可以解释如何做到这一点?