我与Node.js的合作,以建立一个网络套接字服务器使用MongoDB的。

我使用的节点的mongodb天然作为库访问蒙戈分贝。

当我从数据库的对象上调用的console.log(sys.inspect(项目))我得到的东西看起来是这样的:

{ _id: { id: 'L?#&\u008e\u00ad\u000e\u008f\u0014\u0005\u0000\u0000' }
, y: 3
, favorite_color: 'orange'
, x: 14766
}

所以我猜测的id是BSON对象的ID MONGO用途。

我需要这个对象发送到使用JSON的客户端的网页浏览器,让他们做一些东西给它,然后将其发送回服务器。

当我JSON.stringify(项目),我得到的东西看起来是这样的:

{"_id":"4c3f23268ead0e8f14050000","y":3,"favorite_color":"orange","x":14766}

因此,ID已变成一些十六进制编码的字符串。如果我把它发送给客户端,客户端发回,我现在需要在数据库中进行更新。我跑JSON.parse(项目)得到它是一个正常的目标,但它仍然是这样的:

{ _id: '4c3f23268ead0e8f14050000'
, y: 3
, favorite_color: 'orange'
, x: 14766
}

和该_id不能被用于查找在MongoDB中。

我怎样才能将其转换回,这将能够被用于查找在蒙戈?

格式

- 更新 -

有趣的是,我可以使用findOne({_id:item._id}, collection)拿到文件,但如果我这样做:

findOne({_id:{id : item._id.id}}, collection)

我没有收到的结果。我想有什么特别的蒙戈_id对象。

两者{_id:item._id}{_id:{id : item._id.id}} 当倒出的外观是这样的:

{ _id: { id: 'L?#&\u008e\u00ad\u000e\u008f\u0014\u0005\u0000\u0000' } }

- 另一个更新解决---

有在集成测试文件中的一些对象的id操纵。

OBJECTID =新mongo.ObjectID.createFromHexString( '47cc67093475061e3d95369d'); 会给我要找的_id。

objectId.toHexString() 将返回十六进制字符串,看起来像“47cc67093475061e3d95369d”

有帮助吗?

解决方案

我的猜测是sys.inspect解释一个的ObjectId 作为含有对象id财产。这就是你看到垃圾堆里的东西。

的MongoDB对待的ObjectId作为一个12字节的二进制值,而不是作为一个对象。所以MongoDB的不知道任何id财产。这就是为什么下面的查询产生任何结果:

findOne({_id: {id: item._id.id}}, collection)

下面不工作的,因为它只是把两者的值作为二进制值:

findOne({_id: item._id}, collection)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top