79

在 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 变成字符串呢?

4

12 回答 12

128

尝试这个:

user._id.toString()

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

所以,你必须这样做:

console.log(user._id.toString());
于 2012-12-18T13:05:40.613 回答
24

去掉下划线再试一次:

console.log(user.id)

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

于 2012-11-09T03:46:37.373 回答
21

我正在使用 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.
   }
})
于 2013-03-20T04:24:46.597 回答
17

尝试这个:

objectId.str;

文档

于 2013-11-04T14:39:51.907 回答
8

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

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

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

于 2015-12-23T23:47:37.970 回答
3

使用猫鼬时。

的表示_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") })
于 2018-05-08T13:11:24.030 回答
2
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))。

于 2014-08-30T17:10:06.533 回答
1

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

试试这个:

console.log(user[0]["_id"]);
于 2012-11-09T00:33:52.163 回答
0

从 Mongoose 5.4 开始,您可以使用 SchemaType Getters 将 ObjectId 转换为 String。

请参阅Mongoose 5.4 中的新增功能:全局 SchemaType 配置

于 2021-10-25T20:13:56.203 回答
0

像这样访问对象 id 中的属性user._id.$oid

于 2016-05-27T00:06:16.437 回答
0

真正简单的使用String(user._id.$oid)

于 2021-11-10T10:57:40.990 回答
0

尝试这个 :console.log(user._doc._id)

于 2021-12-07T11:05:06.497 回答