【问题标题】:NodeJS MongoDB - how to fix update operation document must contain atomic operators?NodeJS MongoDB - 如何修复更新操作文档必须包含原子运算符?
【发布时间】:2018-01-05 07:24:41
【问题描述】:

我是 mongodb 和 Nodejs 的新手,我想知道我的代码有什么问题,

我遇到更新操作文档在使用updateOne时必须包含原子操作符,

这是我的代码,

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://url-this-is-working";


MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  var dbase = db.db("SampleNodeDB"); 
  var myquery = { address: "Valley 345" };
  var newvalues = { name: "Mickey", address: "Canyon 123" };
  dbase.collection("customers").updateOne(myquery, newvalues, function(err, res) {
    if (err) throw erre
    console.log("1 document updated");
    db.close();
  });
});

谁能帮我找出并纠正问题,

谢谢!

【问题讨论】:

  • var dbase = db.db("SampleNodeDB"); 这是错误

标签: node.js mongodb


【解决方案1】:

您尝试使用查询更新为新值

    var newvalues = { name: "Mickey", address: "Canyon 123" };

但您应该添加$set 运算符,它是一个原子运算符,如$inc、$push 等,使其成为更新查询。像这样;

    var newvalues = { $set: {name: "Mickey", address: "Canyon 123"} };

【讨论】:

  • $set 运算符解决了这个问题,我想知道为什么 w3school 教程中没有指定它,谢谢!
  • 这对我有用。但我想知道为什么他们有必要......
【解决方案2】:

updateOne() 方法的形式如下。

db.collection.updateOne(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ]
   }
)

示例

try {
   db.restaurant.updateOne(
      { "name" : "Pizza Rat's Pizzaria" },
      { $set: {"_id" : 4, "violations" : 7, "borough" : "Manhattan" } },
      { upsert: true }
   );
} catch (e) {
   print(e);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-16
    • 2016-12-17
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多