Я работаю с Node.js над созданием сервера веб-сокетов, который использует mongodb.
Я использую 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 - это идентификатор объекта 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.
Как я могу преобразовать его обратно в формат, который можно будет использовать для поиска на 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' } }
- Еще одно обновление РАЗРЕШЕНО ---
В тестовом файле интеграции произошли некоторые манипуляции с идентификатором объекта.
objectId = новый mongo.ObjectID.createFromHexString ('47cc67093475061e3d95369d'); предоставит _id, который я ищу.
objectId.toHexString () вернет шестнадцатеричную строку, которая выглядит как '47cc67093475061e3d95369d'