首页 文章

Mongo JSON文档 - > JSON - > BSON

提问于
浏览
2

我正在使用Node.js构建一个使用mongodb的Web套接字服务器 .

我使用node-mongodb-native作为访问mongo db的库 .

当我从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已经变成了一些十六进制编码的字符串 . 如果我将它发送到客户端,并且客户端将其发回,我现在需要在db中更新它 . 我运行JSON.parse(item)使它成为普通对象,但它仍然如下所示:

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

并且_id不能用于查找mongodb .

如何将其转换回可用于在mongo上查找的格式?

--update--

有趣的是,我可以使用 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'的十六进制字符串

1 回答

  • 1

    我的猜测是 sys.inspectObjectId解释为包含 id 属性的对象 . 那个's what you'在转储中看到了 .

    MongoDB将ObjectId视为12字节的二进制值,而不是对象 . 所以MongoDB不知道任何 id 属性 . 这就是为什么以下查询不会产生结果:

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

    以下工作正常,因为它只将两个值视为二进制值:

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

相关问题