Frage

Ich arbeite mit Node.js einem Web-Socket-Server zu bauen, dass Anwendungen MongoDB.

Ich bin mit node-mongodb-native als die Bibliothek Zugang Mongo db.

Als ich console.log (sys.inspect (Artikel)) auf ein Objekt aus der db nenne ich bekommen etwas, das wie folgt aussieht:

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

, damit ich die id bin zu raten, ist die BSON Objekt-ID, die Verwendungen mongo.

Ich brauche dieses Objekt auf den Client-Webbrowser senden JSON verwenden, müssen sie es einige Dinge zu tun, und es dann an den Server zurückschicken.

Wenn ich JSON.stringify (Artikel), bekomme ich etwas, das wie folgt aussieht:

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

So die ID wurde in einen Hex-codierten String gedreht. Wenn ich es an den Client senden, und der Client sendet sie zurück, ich brauche es jetzt in der db zu aktualisieren. Ich betreibe JSON.parse (Artikel), um es ein normales Objekt zu sein, aber es sieht immer noch wie folgt aus:

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

und dass _id nicht in mongodb nachschlagen verwendet werden.

Wie kann ich es zurück konvertieren in ein Format, das für Lookups auf Mongo?

werden in der Lage, verwendet

- update -

Interessanterweise kann ich findOne({_id:item._id}, collection) verwenden um das Dokument zu bekommen, aber wenn ich dies tun:

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

Ich erhalte kein Ergebnis. Ich denke, es ist etwas Besonderes das Mongo _id Objekt ist.

Sowohl {_id:item._id} und {_id:{id : item._id.id}} wenn abgeladen aus sieht wie folgt aus:

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

- Ein weiteres Update RESOLVED ---

Es gab einige Objekt-ID Manipulation in einer Integrationstestdatei.

objectId = new mongo.ObjectID.createFromHexString ( '47cc67093475061e3d95369d'); gibt die _id, dass ich suche.

objectId.toHexString () die Hex-String wird wieder das aussieht wie '47cc67093475061e3d95369d'

War es hilfreich?

Lösung

Meine Vermutung ist, dass sys.inspect interpretiert ein ObjectId als ein Objekt eine enthält id Eigenschaft. Das ist, was Sie in der Müllhalde zu sehen.

MongoDB behandelt die ObjectId als 12-Byte-Binärwert, nicht als Objekt. So MongoDB weiß nicht, über jede id Eigenschaft. Deshalb ist die folgende Abfrage kein Ergebnis ergibt:

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

Die folgende funktioniert, da es nur die beiden Werte als binäre Werte behandelt:

findOne({_id: item._id}, collection)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top