nodejs mongodb对象id到字符串

Swa*_*rma 43 mongoose mongodb node.js

IN nodejs,mongodb,mongoosejs as orm

我这样做

我有一个模型,用户

User.findOne({username:'someusername'}).exec(function(err,user){
console.log(user) //this gives full object with something like {_id:234234dfdfg,username:'someusername'}
//but

console.log(user._id) //give undefined.
})
Run Code Online (Sandbox Code Playgroud)

为什么?那么如何让_id变为字符串呢?

Ion*_*zău 75

试试这个:

user._id.toString()
Run Code Online (Sandbox Code Playgroud)

MongoDB中的ObjectId是一个12字节的UUID可以用作与长度为24个字符一个HEX字符串表示.您需要将其转换为字符串以在console使用中显示它console.log.

所以,你必须这样做:

console.log(user._id.toString());
Run Code Online (Sandbox Code Playgroud)

  • 但请注意,这仅适用于 mongoose - mongodb 不支持此功能。 (2认同)

小智 17

我正在使用mongojs,我有这个例子:

db.users.findOne({'_id': db.ObjectId(user_id)  }, function(err, user) {
   if(err == null && user != null){
      user._id.toHexString(); // I convert the objectId Using toHexString function.
   }
})
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.


Ake*_*ltZ 16

取出下划线并再试一次:

console.log(user.id)
Run Code Online (Sandbox Code Playgroud)

此外,从id返回的值已经是一个字符串,您可以在此处看到.

我这样使用它并且它有效.

干杯

  • 我只想指出,这不适用于mongoose@4.6.8。 (3认同)

小智 15

试试这个:objectId.str;

文件.

  • 到目前为止,我找到的唯一正确答案 (3认同)
  • 如果有更多的背景,这将是完美的答案。 (3认同)

Céd*_*LAS 6

如果您使用的是Mongoose,那么确保将id作为十六进制字符串的唯一方法似乎是:

object._id ? object._id.toHexString():object.toHexString();
Run Code Online (Sandbox Code Playgroud)

这是因为object._id仅在填充对象时存在,否则对象是ObjectId


小智 0

返回的结果find是一个数组。

试试这个:

console.log(user[0]["_id"]);
Run Code Online (Sandbox Code Playgroud)