微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mongodb通过本地ID生成的Node.js后端

如何解决Mongodb通过本地ID生成的Node.js后端

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

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(因为尚未指定),有两点需要关注:

  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 constructor

const ObjectID = require('mongodb').ObjectID

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。