nodejs mongodb对象ID到字符串
Posted
技术标签:
【中文标题】nodejs mongodb对象ID到字符串【英文标题】:nodejs mongodb object id to string 【发布时间】:2012-10-17 18:25:27 【问题描述】:在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转成字符串呢?
【问题讨论】:
请注意,使用 .toString() 的答案仅适用于 mongoose,而不适用于任何本机 mongodb 驱动程序(根据 2.2,您必须使用 .toHexString() .toString() 也为我使用了 mongojs 驱动程序 docs.mongodb.com/manual/reference/method/ObjectId.toString 【参考方案1】:试试这个:
user._id.toString()
MongoDB ObjectId 是一个 12 字节的 UUID,可用作长度为 24 个字符的 HEX 字符串表示。您需要使用console.log
将其转换为字符串以在console
中显示。
所以,你必须这样做:
console.log(user._id.toString());
【讨论】:
请注意,这仅适用于 mongoose - mongodb 不支持此功能。 @UpTheCreek,不,我只将它与 MongoDB 一起使用。我用过here。 从 mongo 2.2 开始,它做了一些别的事情。请参阅文档:docs.mongodb.org/manual/reference/method/ObjectId.toString 我猜您一定在使用旧版本的 mongodb? 不,我使用 Mongo 2.4.4,我的项目仍然有效。一分钟前测试过。 可以确认它不适用于我使用 mongodb2.4 和 mongoskin(使用 mongo-native 驱动程序)的应用程序。通过在 mongo shell 中键入 (new ObjectId().toString()) 来检查 - 你会得到一个字符串,但它不仅仅是十六进制字符串。【参考方案2】:去掉下划线再试一次:
console.log(user.id)
另外,从id返回的值已经是一个字符串,可以看到here。
【讨论】:
我只想指出,这不适用于 mongoose@4.6.8。 哈,我刚刚在@writofmandamus 下面发布了同样的内容,它在 5.4.19 上对我来说工作正常【参考方案3】:我正在使用 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.
)
【讨论】:
【参考方案4】:试试这个:
objectId.str;
见doc。
【讨论】:
再加一点上下文,这将是完美的答案。【参考方案5】:如果您使用的是 Mongoose,确保将 id 作为十六进制字符串的唯一方法似乎是:
object._id ? object._id.toHexString():object.toHexString();
这是因为 object._id 仅在对象被填充时才存在,否则对象是 ObjectId
【讨论】:
【参考方案6】:使用猫鼬时。
_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") )
【讨论】:
我不这么认为。这就是我的回报[object Object]
【参考方案7】:
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 是一个 object (console.log(typeof it._id))。
【讨论】:
【参考方案8】:find
返回的结果是一个数组。
试试这个:
console.log(user[0]["_id"]);
【讨论】:
如果使用了find
,那将是正确的,但这是findOne
。
这确实适用于find
。花了两个小时试图找到这些信息。谢谢。
或 console.log(user[0]._id);【参考方案9】:
像user._id.$oid
那样访问对象ID中的属性。
【讨论】:
【参考方案10】:从 Mongoose 5.4 开始,您可以使用 SchemaType Getters 将 ObjectId 转换为 String。
见What's New in Mongoose 5.4: Global SchemaType Configuration。
【讨论】:
【参考方案11】:使用String(user._id.$oid)
真的很简单
【讨论】:
【参考方案12】:试试这个:console.log(user._doc._id)
【讨论】:
以上是关于nodejs mongodb对象ID到字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在 javascript (ionic | Angular | NodeJS | MongoDB) 中将包含对象的数组展平和减少为逗号分隔的字符串
NodeJS 和 MongoDB - 根据 id 数组获取对象
如何在nodejs mongodb本机驱动程序中将字符串转换为ObjectId?