nodejs mongodb对象id到字符串

时间:2012-10-27 22:22:43

标签: node.js mongodb mongoose

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.
})

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

11 个答案:

答案 0 :(得分:70)

试试这个:

user._id.toString()

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

所以,你必须这样做:

console.log(user._id.toString());

答案 1 :(得分:15)

取出下划线并再试一次:

console.log(user.id)

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

我这样使用它并且有效。

干杯

答案 2 :(得分:15)

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

我希望这有帮助。

答案 3 :(得分:13)

试试这个: objectId.str;

请参阅doc

答案 4 :(得分:6)

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

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

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

答案 5 :(得分:1)

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

请改为尝试:

的console.log(用户[0] [ “_ ID”]);

答案 6 :(得分:1)

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(typeof it._id))。

答案 7 :(得分:1)

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

Mongodb find is not working with the Objectid

答案 8 :(得分:1)

使用猫鼬时。

_id的表示通常采用(收到的客户端)

的形式

{ _id: { _bsontype: 'ObjectID', id: <Buffer 5a f1 8f 4b c7 17 0e 76 9a c0 97 aa> },

正如你所看到的,那里有一个缓冲区。转换它的最简单方法就是执行<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") })

答案 9 :(得分:1)

有两种方法可以做到这一点:

  1. 使用user._id代替使用user.id,它将为您返回一个字符串
  2. 如果您真的想走很长一段路,可以使用user._id.toString()

答案 10 :(得分:0)

访问对象ID中的属性,如user._id.$oid