Я работаю с Node.js для создания сервера веб-сокетов, который использует mongodb.
Я использую node-mongodb-native в качестве библиотеки для доступа к базе данных mongo.
Когда я вызываю console.log (sys.inspect (item)) для объекта из базы данных, которую я получаючто-то похожее на это:
{ _id: { id: 'L?#&\u008e\u00ad\u000e\u008f\u0014\u0005\u0000\u0000' }
, y: 3
, favorite_color: 'orange'
, x: 14766
}
, поэтому я предполагаю, что id - это идентификатор объекта BSON, который использует mongo.
Мне нужно отправить этот объект в веб-браузер клиента с помощью JSON,попросите их кое-что сделать, а затем отправить их обратно на сервер.
Когда я JSON.stringify (item), я получаю что-то похожее на это:
{"_id":"4c3f23268ead0e8f14050000","y":3,"favorite_color":"orange","x":14766}
Таким образом, идентификатор был преобразован в некоторую строку в шестнадцатеричном коде.Если я отправляю его клиенту, а клиент отправляет его обратно, мне нужно обновить его в базе данных.Я запускаю JSON.parse (item), чтобы он стал нормальным объектом, но он все равно выглядит так:
{ _id: '4c3f23268ead0e8f14050000'
, y: 3
, favorite_color: 'orange'
, x: 14766
}
, и этот _id нельзя использовать для поиска в mongodb.
Как я могу преобразовать его обратно в формат, который можно будет использовать для поиска на монго?
- обновление -
Интересно, я могу использовать 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' } }
- Другое обновление RESOLVED ---
Произошли некоторые манипуляции с идентификатором объекта в файле интеграционного теста.
objectId = new mongo.ObjectID.createFromHexString ('47cc67093475061e3d95369d');выдаст искомый _id.
objectId.toHexString () вернет шестнадцатеричную строку, которая выглядит как '47cc67093475061e3d95369d'