javascript - 通过对象 ID 定位时无法更新字段,json 解析错误
问题描述
我有一个包含内容的集合:
db.simplecollection2.find()
{ "_id" : ObjectId("5c312200508c979b46d21866"), "artistname" : "The
Tea Party" }
当我在 mongo shell 中使用以下内容更改艺术家名称时,它可以工作
db.simplecollection2.update(
{"_id":ObjectId("5c312200508c979b46d21866")},{"artistname":"new"})
但是在javascript中我得到一个错误:SyntaxError:JSON.parse()的位置7处的JSON中的意外令牌O,虽然我将字符串解析为对象而不是对象到对象..这是为什么?
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();
});
解决方案
调用 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();
});
推荐阅读
- c# - 我应该为此使用线程吗?
- javascript - 如何将 Firebase 上传图片的图片下载 URL 转换为 base64
- python - 检查 psycopg2 客户端是否在听主题
- api - Mapbox 导航 api 返回 422 无法处理的实体
- google-apps-script - Google 表格脚本 HTML 在屏幕上输出一整行
- python-3.x - 带有 Gstreamer 的 cv2。错误:GST_PIPELINE 语法。y:716:priv_gst_parse_yyparse:没有元素 xxx
- python - 使用 Airflow 的 Impala 查询
- android - 如何为 UI 和 Android 服务使用两个 android 应用程序类?
- git - 我可以从 git-lfs 中排除一些文件吗?
- gulp - gulp-clean 和 del 无法清理我想要的文件夹