如何在node中连接mongodb并通过_id修改对应数据

之前已经试过node连接数据库:koa中如何获取到mongodb的数据并展示在页面上

然后现在想做更新,然后按着http://www.runoob.com/nodejs/nodejs-mongodb.html 中的例子来做,如果全部条件都更新,则理论来说代码如下:

(错误示范)

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
 
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("runoob");
    var whereStr = {"_id":'XXXXXXXXXX'};  // 查询条件
    var updateStr = {$set: { "url" : "https://www.runoob.com" }};
    dbo.collection("site").updateOne(whereStr, updateStr, function(err, res) {
        if (err) throw err;
        console.log("文档更新成功");
        db.close();
    });
});

然发现查询不出任何结果,后来通过断点发现这里的_id我传的是字符串。

(正确示范)

var MongoClient = require('mongodb').MongoClient;
var ObjectId = require('mongodb').ObjectId ;
var url = "mongodb://localhost:27017/";
 
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("runoob");
    var whereStr = {_id:ObjectId(XXXXXXXX)};  // 查询条件
    var updateStr = {$set: { "url" : "https://www.runoob.com" }};
    dbo.collection("site").updateOne(whereStr, updateStr, function(err, res) {
        if (err) throw err;
        console.log("文档更新成功");
        db.close();
    });
});

因为_id是自动生成的,然后键值大约是这样:ObjectId("5bc6f3f016e4e13bc8c0f1d5"),页面获取的结果却是5bc6f3f016e4e13bc8c0f1d5,要想修改,需要要加上ObjectId()

 


这里普及下ObjectId知识:

MongoDB中我们经常会接触到一个自动生成的字段:”_id”,类型为ObjectId。

之前我们使用MySQL等关系型数据库时,主键都是设置成自增的。但在分布式环境下,这种方法就不可行了,会产生冲突。为此,MongoDB采用了一个称之为ObjectId的类型来做主键。ObjectId是一个12字节的 BSON 类型字符串。按照字节顺序,一次代表:

4字节:UNIX时间戳
3字节:表示运行MongoDB的机器
2字节:表示生成此_id的进程
3字节:由一个随机数开始的计数器生成的值

参考内容:MongoDB ObjectId详解及使用

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值