Вопрос

Я работаю с 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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top