节点脚本中的Mongodb updateMany命令并不像其他命令那样需要exec()

时间:2018-04-02 23:39:57

标签: node.js mongodb mongoose

我可以在我的代码中访问多个dbs,对于一些我们使用"mongoose": "4.11.7",但对于有问题的那个,我们称之为dbOne,我们使用"mongoose": "4.6.1"。我最近需要编写一个节点脚本来更新dbOne上的集合,为此,我写了一个如下命令:

示例1

try {
     await data.dbOne.CollectionOne.update({}, {
        $unset: {
            "attributeOne": "",
        }}, {multi: true}).exec();
} catch (e) {
    console.log(e);
}

这很好,所以我继续前进。但是,我现在必须在同一个数据库中更新另一个集合,让我们称之为CollectionTwo,并且由于某种原因,上面的类似命令不起作用!即。

示例2

try {
    await data.dbOne.CollectionTwo.update({}, {
        $unset: {
            "attributeOne": "",
        }}, {multi: true}).exec();
 } catch (e) {
    console.log(e);
}

相反,正在发挥作用的是:

示例3

try {
    let results = await data.dbOne.CollectionTwo.collection.updateMany({attributeOne: {$exists: true}}, {$set: {attributeOne: ""}});
    console.log("Unset attributeOne");
} catch (e) {
    console.log(e);
}

请注意我在第3个示例中必须执行以下操作才能正常工作:

  • 使用updateMany代替update
  • 附加collection关键字
  • 删除exec()(我收到错误消息称exec()不是函数)

现在,我已经环顾四周,但我不确定这个问题是否与moogoose版本差异,mongodb有关,某种程度上是关于架构对象,或者是什么,所以我不是确定在哪里寻找解释。任何提示,建议或答案将不胜感激,我真的想了解这里发生了什么。

0 个答案:

没有答案