Pregunta

Estoy trabajando con Node.js para construir un servidor de socket web que utiliza MongoDB.

Estoy utilizando el nodo-mongodb-natal como la biblioteca para el acceso MongoDB.

Cuando llamo console.log (sys.inspect (elemento)) en un objeto de la db consigo algo que es similar al siguiente:

{ _id: { id: 'L?#&\u008e\u00ad\u000e\u008f\u0014\u0005\u0000\u0000' }
, y: 3
, favorite_color: 'orange'
, x: 14766
}

así que estoy adivinando el id es el identificador de objeto BSON que Mongo usos.

Es necesario enviar este objeto al navegador web del cliente utilizando JSON, tiene que hacer algunas cosas a él, y luego lo envía de vuelta al servidor.

Cuando JSON.stringify (elemento), me sale algo que es similar al siguiente:

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

Así que la ID se ha convertido en un trozo de cuerda hexagonal codificada. Si lo envío al cliente, y el cliente envía de vuelta, ahora que actualizarlo en el PP. Corro JSON.parse (punto) para conseguir que sea un objeto normal, pero todavía se ve como esto:

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

y que _id no se pueden utilizar para buscar en MongoDB.

¿Cómo puedo convertir de nuevo a un formato que sea capaz de ser utilizado para las búsquedas en mongo?

- Actualización -

Es interesante que puede utilizar findOne({_id:item._id}, collection) para obtener el documento, pero si hago esto:

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

Yo no recibo un resultado. Creo que hay algo especial acerca del objeto mongo _id.

Tanto {_id:item._id} y {_id:{id : item._id.id}} cuando se vierten a cabo el siguiente aspecto:

{ _id: { id: 'L?#&\u008e\u00ad\u000e\u008f\u0014\u0005\u0000\u0000' } }

- Otra actualización RESUELVE ---

Hubo alguna manipulación Identificación del objeto en un archivo de prueba de integración.

objectId = new mongo.ObjectID.createFromHexString ( '47cc67093475061e3d95369d'); dará _ID que yo estoy buscando.

objectId.toHexString () devolverá la cadena hexadecimal que se parece a '47cc67093475061e3d95369d'

¿Fue útil?

Solución

Mi conjetura es que interpreta sys.inspect un OBJECTID como un objeto que contiene una id propiedad. Eso es lo que se está viendo en el vertedero.

MongoDB trata la OBJECTID como un valor binario de 12 bytes, no como un objeto. Así MongoDB no sabe nada de cualquier propiedad id. Es por eso que la siguiente consulta no da resultado:

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

A continuación se hace el trabajo, ya que sólo se trata a ambos valores como valores binarios:

findOne({_id: item._id}, collection)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top