我有一个收藏的内容:
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();
});
答案 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" });