Mongo Json Document -> JSON -> BSON
Вопрос
Я работаю с Node.js, чтобы построить сервер веб-сокета, который использует MongoDB.
Я использую Node-MongoDB-NAUN, как библиотека для доступа к 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 (товар), я получаю то, что выглядит так:
{"_id":"4c3f23268ead0e8f14050000","y":3,"favorite_color":"orange","x":14766}
Таким образом, идентификатор был превращен в некоторую шестигранную закодированную строку. Если я отправлю его клиенту, и клиент отправляет его обратно, теперь мне нужно обновить его в БД. Я запускаю JSON.PARSE (товар), чтобы получить его обычным объектом, но он все еще выглядит так:
{ _id: '4c3f23268ead0e8f14050000'
, y: 3
, favorite_color: 'orange'
, x: 14766
}
И что _id не может быть использован, чтобы посмотреть в Монгодб.
Как я могу преобразовать его обратно в формат, который сможет использовать для поиска на 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 = NEW MONGO.OBJECTID.CREATEFROMHEXSTRINGS ('47CC67093475061E3D95369D'); даст _ид, что я ищу.
objectiD.tohexString () вернет шестигранную строку, которая выглядит как '47cc67093475061e3d95369d'
Решение
Я думаю, что sys.inspect
интерпретировать Ань Объект как объект, содержащий id
имущество. Это то, что вы видите в свалке.
MongoDB относится к ObjectID как 12-байтовое двоичное значение, а не как объект. Так что Монгодб не знает о каких-либо id
имущество. Вот почему следующие запросы не дают результата:
findOne({_id: {id: item._id.id}}, collection)
Следующее работает, так как он просто относится к обоим значениям как двоичные значения:
findOne({_id: item._id}, collection)