在JavaScript中将ObjectID(Mongodb)转换为字符串

93
我想在JavaScript中将ObjectID(Mongodb)转换为字符串。 当我从MongoDB中得到一个对象时,它看起来像是一个具有时间戳、秒数、增量和机器的对象。 我无法将其转换为字符串。

2
""+objectId 或者 objectId.toString(),其中 objectId 是我认为能满足你需求的变量。 - Sammaye
1
从MongoDB加载的ObjectID是一个对象。如果在Javascript中使用toString()函数,它将返回[Object,Object]。 - vhlen
奇怪,这些函数应该已经被实现了,我确定已经修复了。 - Sammaye
不知道是谁把这个标记为重复的:https://dev59.com/kF3Ua4cB1Zd3GeqP9yv3,但你是严重错误的... - Sammaye
幸运的是,下面的内容是JavaScript :) - Sammaye
显示剩余3条评论
22个回答

132

试试这个:

// mongo shell
objectId.str

// mongo client, JS, Node.js
objectId.toString()

请查看文档

ObjectId()具有以下属性和方法:

  • str - 返回对象的十六进制字符串表示。

.toString()是从@J.C.的评论中添加的。


我不明白为什么这对我不起作用,当我执行console.log时,我在控制台上看到objectId是一个对象。 - roz
21
这对我也没用。但是,objectId.toString() 可以。 - J.C.
1
objectId.str 用于 mongo shell,objectId.toString() 用于 mongo 客户端。 - user7247147
和尚的问题有什么解决方法?无论是 .str 还是 .toString() 都没有用,我只得到一个对象,其中显示的确切字符串正是我要找的,但与另一个字符串进行相等性检查时并不匹配。 - jacktim

29

这是一个将ObjectId转换为字符串的工作示例

> a=db.dfgfdgdfg.findOne()
{ "_id" : ObjectId("518cbb1389da79d3a25453f9"), "d" : 1 }
> a['_id']
ObjectId("518cbb1389da79d3a25453f9")
> a['_id'].toString // This line shows you what the prototype does
function () {
    return "ObjectId(" + tojson(this.str) + ")";
}
> a['_id'].str // Access the property directly
518cbb1389da79d3a25453f9
> a['_id'].toString()
ObjectId("518cbb1389da79d3a25453f9") // Shows the object syntax in string form
> ""+a['_id'] 
518cbb1389da79d3a25453f9 // Gives the hex string

我尝试了其他各种功能,比如toHexString(),但都没有成功。


1
.toHexString() 对我有用,谢谢Sammaye!http://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html - js_gandalf
截至2022年,没有.str - 将ObjectId转换为字符串的唯一可行方法是通过.toString()。 - ShadowGames

28

shell 中:

ObjectId("507f191e810c19729de860ea").str

在使用 node 的原生驱动程序时的 js 中

objectId.toHexString()


3
好的答案,指出了使用本地驱动程序的差异。 - user3142695
1
如果您正在使用像NoSQLBooster这样的客户端,那么就是这种情况。谢谢。 - Francisco Javier Barrena

16

您可以使用在mongodb 4.0版本中引入的聚合操作符$toString,该操作符将ObjectId转换为字符串。

db.collection.aggregate([
  { "$project": {
    "_id": { "$toString": "$your_objectId_field" }
  }}
])

10

8

如果有人在Meteorjs中使用,可以尝试:

在服务器端:ObjectId(507f191e810c19729de860ea)._str

在模板中:{{ collectionItem._id._str }}


8
实际上,你可以尝试这样做:
> a['_id']
ObjectId("518cbb1389da79d3a25453f9")
> a['_id'] + ''
"518cbb1389da79d3a25453f9"

ObjectId对象 + 字符串会转换为字符串对象。


6
假设OP想获得ObjectId的十六进制字符串值,使用Mongo 2.2及以上版本,valueOf()方法将以十六进制字符串形式返回对象的表示。这也可以通过str属性实现。anubiskong帖子中的链接提供了所有细节,危险在于使用已从旧版本更改的技术,例如toString()

6
在JavaScript中,使用String()函数使其易于操作字符串。
const id = String(ObjectID)

5

这个方法可行,你有一个mongodb对象:ObjectId(507f191e810c19729de860ea), 要获取_id的字符串值,只需输入:

ObjectId(507f191e810c19729de860ea).valueOf();

请改进你的回答。 - Ivan Barayev
字符串被包装在ObjectId中,因此要获取包装值,您可以使用我刚提供的答案@Ivan Barayev。 - ndotie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接