问题描述
db.secrets.update({_id: ObjectId("5f767cd481cea1687b3dbf86")},{$set: {secret_rating: 5}})
但是,在ping通时,在节点服务器上使用实质上相同的查询更新记录无法完成此任务。在我的模型中尝试查询记录时,我做错了吗?很明显,ObjectId不是我的服务器本地的。
db.secrets.update({_id: "5f767cd481cea1687b3dbf86"},{$set: {secret_rating: 5}})
解决方法
假设您使用的是Nodejs Mongodb driver而不是一些ORM(因为尚未指定),有两点需要关注:
- 据我所知,如果在
db
变量中有一个到所需数据库的连接对象,则不能像使用db.secrets
那样直接引用集合;您必须改为使用collection
方法,如下所示:
const secrets = db.collection("secrets");
secrets.find({
/*your query here*/
}).then((results) => {})
因此,除非您为db.secrets
分配了db.collection("secrets")
,否则应该会收到错误消息Cannot read property "update" of undefined
。但是我要假设您在db.secrets
中有集合对象,因为您没有提到自己会遇到该错误。
- 您似乎正在使用字符串而不是
ObjectID
对象。您可以像这样从nodejs驱动程序导入ObjectID constructor:
const ObjectID = require('mongodb').ObjectID
然后在查询中,您将必须创建一个新的ObjectID以获得正确的结果:
db.collection("secrets").find({
_id: new ObjectID("5f767cd481cea1687b3dbf86")
}).then((results) => {})
注意::如果提供给它的字符串不是有效的24字符十六进制字符串,则ObjectID
构造函数将引发错误,因此,如果您得到{{ 1}}字符串作为某处的输入(例如,作为API中的参数或作为命令行参数),您可能希望将其包装在处理该错误的函数中。