0

第一次使用 MongoDB。此查询在 cmd 行中对我有用:

db.secrets.update({_id: ObjectId("5f767cd481cea1687b3dbf86")}, {$set: {secret_rating: 5}})

但是,在我的节点服务器上使用基本相同的查询更新记录在 ping 时不会完成此任务。我试图在我的模型中查询这样的记录是错误的吗?ObjectId 显然不是我的服务器原生的。

db.secrets.update({_id: "5f767cd481cea1687b3dbf86"}, {$set: {secret_rating: 5}})
4

1 回答 1

0

假设您使用的是Nodejs Mongodb 驱动程序而不是一些 ORM(因为尚未指定),请注意两点:

  1. 据我所知,如果您在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因为你没有提到你得到了那个错误。

  1. 您似乎使用的是字符串而不是ObjectID对象。您可以像这样从 nodejs 驱动程序导入ObjectID 构造函数:

const ObjectID = require('mongodb').ObjectID

然后在您的查询中,您必须创建一个新的 ObjectID 才能获得正确的结果:

db.collection("secrets").find({
    _id: new ObjectID("5f767cd481cea1687b3dbf86")
}).then((results) => {})

注意:如果提供给它的ObjectID字符串不是有效的 24 字符十六进制字符串,则构造函数将引发错误,因此,如果您id从某处获取字符串作为输入(例如,作为 API 中的参数或作为命令行参数),您可能希望将其包装在处理该错误的函数中。

于 2020-10-02T07:05:20.747 回答