NodeJS,使用MongoDB Native驱动程序,如何将ObjectID转换为字符串

时间:2013-08-21 02:02:36

标签: javascript node.js mongodb

我正在使用NodeJS的MongoDB本机驱动程序,并且无法将ObjectID转换为string

我的代码如下:

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();

但它们似乎都不起作用。

我正在尝试将ObjectID转换为base64编码。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);
        }
    });
});

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