通过对象ID定位时无法更新字段,JSON解析错误

时间:2019-01-05 23:41:26

标签: javascript mongodb

我有一个收藏的内容:

db.simplecollection2.find()
{ "_id" : ObjectId("5c312200508c979b46d21866"), "artistname" : "The 
Tea Party" }

当我在mongo shell中使用以下名称更改艺术家名称时,它会起作用

db.simplecollection2.update(
{"_id":ObjectId("5c312200508c979b46d21866")},{"artistname":"new"})

但是在javascript中,我收到一个错误:SyntaxError:JSON中意外的令牌O在JSON.parse()的位置7,尽管我将字符串解析为对象,而不是对象。.为什么?

MongoClient.connect(url, function(err, db) {
      if (err) throw err;
      var dbo = db.db("simpledb");
      var myquery = JSON.parse("{\"_id\":ObjectId(\"5c31184bdb14729aa4806882\")}");
      var newvalues = { $set: {"artistname":"cool"} };
      dbo.collection("simplecollection2").updateOne(myquery, newvalues, function(err, res) {
        if (err) throw err;
        console.log("1 document updated");
        db.close();
      });

2 个答案:

答案 0 :(得分:0)

调用JSON.parse的行失败,因为参数不是JSON。如果您执行JSON.stringify({"_id":ObjectId("5c312200508c979b46d21866")}),将会看到它也无法将其转换为字符串。原因是JSON可以包含字符串,布尔值,数字和数组。 ObjectId("5c312200508c979b46d21866")不能解决浏览器知道的问题,即使它在Shell中有意义。但是,我认为如果将其作为字符串传递,则它应该可以作为对数据库的查询。

MongoClient.connect(url, function(err, db) {
      if (err) throw err;
      var dbo = db.db("simpledb");
      var myqueryObj = {
          _id: 'ObjectId("5c312200508c979b46d21866")'
      };
      var myquery = JSON.parse(JSON.stringify(myqueryObj));
      var newvalues = { $set: {"artistname":"cool"} };
      dbo.collection("simplecollection2").updateOne(myquery, newvalues, function(err, res) {
        if (err) throw err;
        console.log("1 document updated");
        db.close();
      });

答案 1 :(得分:0)

使用ObjectID()更新:

let id = new mongo.ObjectID("5c312200508c979b46d21866");
db.simplecollection2.update({ "_id" : id }, { "artistname" : "new" });

Read More