2

我正在为 NodeJS 使用 MongoDB 本机驱动程序,并且无法转换ObjectIDstring.

我的代码如下所示:

db.collection('user', function(err, collection) {
  collection.insert(data, {safe:true}, function(err, result) { 
    var myid = result._id.toString();
    console.log(myid);
  )};
});

我在 StackOverflow 上尝试过各种建议,例如:

myid = result._id.toString();
myid = result._id.toHexString();

但它们似乎都不起作用。

我正在尝试将其转换ObjectIDbase64编码。

不确定我是否在 Mongo 本机驱动程序下遇到了支持的功能。

4

2 回答 2

6

这对我有用:

var ObjectID = require('mongodb').ObjectID;
var idString = '4e4e1638c85e808431000003';
var idObj = new ObjectID(idString);

console.log(idObj);
console.log(idObj.toString());
console.log(idObj.toHexString());

输出:

4e4e1638c85e808431000003
4e4e1638c85e808431000003
4e4e1638c85e808431000003
于 2013-08-21T02:17:28.710 回答
2

insert返回结果数组(因为您也可以发送要插入的对象数组),因此您的代码试图_id从数组实例而不是第一个结果中获取:

MongoClient.connect("mongodb://localhost:27017/testdb", function(err, db) {
    db.collection("user").insert({name:'wiredprairie'}, function(err, result) {
        if (result && result.length > 0) {
            var myid = result[0]._id.toString();
            console.log(myid);
        }
    });
});

此外,您不需要对调用toStringan的结果进行 base64 编码,ObjectId因为它已经作为十六进制数字返回。您也可以调用:result[0]._id.toHexString()直接获取十六进制值(toString只需换行toHexString)。

于 2013-08-21T12:23:54.207 回答