我正在使用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本机驱动程序下的受支持功能。
答案 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}})。