node.js-nodejs mongodb对象ID转换为字符串

在nodejs中,使用mongodb,mongoosejs作为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.
})

为什么? 以及如何将_id字符串化呢?

Swati Sharma asked 2020-07-22T07:00:55Z
10个解决方案
74 votes

试试这个:

user._id.toString()

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

因此,您必须这样做:

console.log(user._id.toString());
Ionică Bizău answered 2020-07-22T07:01:40Z
17 votes

我正在使用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.
   }
})

希望对您有所帮助。

Mauricio Giraldo answered 2020-07-22T07:02:04Z
15 votes

试试这个:objectId.str;

见文件。

anubiskong answered 2020-07-22T07:02:28Z
15 votes

删除下划线,然后重试:

console.log(user.id)

另外,从id返回的值已经是一个字符串,如您在此处看到的。

我正在以这种方式使用它并且有效。

干杯

AkerbeltZ answered 2020-07-22T07:03:01Z
6 votes

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

object._id ? object._id.toHexString():object.toHexString();

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

Cédric NICOLAS answered 2020-07-22T07:03:25Z
2 votes

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

尝试以下方法:

console.log(user [0] [“ _ id”]);

Giovanni Donelli answered 2020-07-22T07:03:54Z
1 votes
function encodeToken(token){
    //token must be a string .
    token = typeof token == 'string' ? token : String(token)
}

User.findOne({name: 'elrrrrrrr'}, function(err, it) {
    encodeToken(it._id)
})

在mongoose中,objectId是一个对象(console.log(typeofit._id))。

elrrrrrrr answered 2020-07-22T07:04:13Z
1 votes

当使用猫鼬。

_id的表示形式通常是(接收到的客户端)形式

<obj>.toString()

如您所见,那里有一个缓冲区。 转换它的最简单方法是执行<obj>.toString()String(<obj>._id)

所以举个例子

var mongoose = require('mongoose')
mongoose.connect("http://localhost/test")
var personSchema = new mongoose.Schema({ name: String })
var Person = mongoose.model("Person", personSchema)
var guy = new Person({ name: "someguy" })
Person.find().then((people) =>{
  people.forEach(person => {
    console.log(typeof person._id) //outputs object
    typeof person._id == 'string'
      ? null
      : sale._id = String(sale._id)  // all _id s will be converted to strings
  })
}).catch(err=>{ console.log("errored") })
davejoem answered 2020-07-22T07:04:46Z
1 votes

我遇到了同样的问题,.toString()为我工作。 我正在使用mongojs驱动程序。 这是我的问题

Mongodb查找不适用于Objectid

Pritam Karmakar answered 2020-07-22T07:05:11Z
0 votes

user._id.$oid一样访问对象ID中的属性。

DanielKhan answered 2020-07-22T07:05:31Z
translate from https://stackoverflow.com:/questions/13104690/nodejs-mongodb-object-id-to-string