我正在使用 Node.js 构建一个使用 mongodb 的 Web 套接字服务器。
我使用 node-mongodb-native 作为库来访问 mongo db。
当我在数据库中的对象上调用 console.log(sys.inspect(item)) 时,我得到如下所示的内容:
{ _id: { id: 'L?#&\u008e\u00ad\u000e\u008f\u0014\u0005\u0000\u0000' }
, y: 3
, favorite_color: 'orange'
, x: 14766
}
所以我猜测 id 是 mongo 使用的 BSON 对象 id。
我需要使用 JSON 将此对象发送到客户端 Web 浏览器,让他们对其执行一些操作,然后将其发送回服务器。
当我 JSON.stringify(item) 时,我得到如下所示的内容:
{"_id":"4c3f23268ead0e8f14050000","y":3,"favorite_color":"orange","x":14766}
所以 id 已经变成了一些十六进制编码的字符串。如果我将它发送给客户端,然后客户端将其发回,我现在需要在数据库中更新它。我运行 JSON.parse(item) 让它成为一个普通对象,但它仍然看起来像这样:
{ _id: '4c3f23268ead0e8f14050000'
, y: 3
, favorite_color: 'orange'
, x: 14766
}
并且 _id 不能用于在 mongodb 中查找。
如何将其转换回可用于在 mongo 上查找的格式?
- 更新 -
有趣的是,我可以findOne({_id:item._id}, collection)
用来获取文档,但如果我这样做:
findOne({_id:{id : item._id.id}}, collection)
我没有收到结果。我想 mongo _id 对象有一些特别之处。
两者都 {_id:item._id}
和 {_id:{id : item._id.id}}
当被丢弃时看起来像这样:
{ _id: { id: 'L?#&\u008e\u00ad\u000e\u008f\u0014\u0005\u0000\u0000' } }
--另一个更新已解决---
集成测试文件中有一些对象 ID 操作。
objectId = new mongo.ObjectID.createFromHexString('47cc67093475061e3d95369d'); 将给出我正在寻找的 _id。
objectId.toHexString() 将返回看起来像 '47cc67093475061e3d95369d' 的十六进制字符串