2016-09-20 1 views
0

Ich habe eine MEAN-Stack-Anwendung._id von ObjectId in Zeichenfolge in MEAN-Anwendung konvertiert

In meiner Datenbank, ein Dokument ein Mongo ObjectId wie solche:

{ "_id" : ObjectId("57e15b1009cb82cafafafd73"), "name" : "Hello", "artist_id" : "world", "year" : "2000" } 

Aber wenn ich das Dokument in meinem vorderen Ende zu laden, die _id in einen String umgewandelt wird, und mein Objekt sieht wie folgt aus, wenn im Browser protokolliert:

{ "_id" : "57e15b1009cb82cafafafd73", "name" : "Hello", "artist_id" : "world", "year" : "2000" } 

Was ärgerlich ist, ist, dass, wenn ich meine Datenbank von meinem Frontend ändern möchten (Update oder ein vorhandenes Dokument löschen), ich habe die _id von String ObjectId zu konvertieren, um zu Ziel das Dokument in meiner Datenbank ... Also in meiner Knoten-Anwendung muss ich systematisch die _id mit new ObjectId(stringId) massieren, weil die vom Browser gesendeten Id Zeichenfolgen sind ...

Obvisouly Ich vermisse etwas. Wie kann ich die Dinge eleganter machen?

+0

Es ist nichts falsch über 'neue ObjectId (StringId)'. Da es in JavaScript keinen * ObjectId * -Typ gibt, müssen Sie die Methode ObjectId von mongo verwenden, um sie in einen zu konvertieren. – Molda

+0

'ObjectId' ist kein unterstützter Typ in JSON, daher die (notwendige) Umwandlung in' String'. – robertklep

+0

Dies ist normal, wie von @Molda erwähnt, ich habe Spring-Data-Mongo-Treiber verwendet und meine Klassen-ID als String zugeordnet, da es in Java keinen ObjectId-Datentyp gibt, der Treiber macht den Großteil der Arbeit, es ist immer noch nervig, 'neue ObjectId 'zu schreiben (id) 'wenn wir abfragen. Vielleicht sind die Fahrer nicht so ausgereift, wie wir es gerne hätten. –

Antwort

0

Welches Modul verwenden Sie für Mongodb, denke ich, Mungo? Wenn Sie Mungo verwenden, dann müssen Sie Ihre _id nicht in ObjectId konvertieren, nur die Abfrage mit String ausführen.

db.collection.find({_id: "57e15b1009cb82cafafafd73"}); 
+0

Ich benutze Mongodb nicht Mungo. – Lev

+0

Was verwenden Sie, um mongodb in Knoten-Anwendung zu verbinden? –

+0

laß mongo = verlangen ('mongodb'); – Lev

1

Das ist normal String als objectId mit ObjectId() zu konvertieren, weil, wenn Sie es auf dem Web sind vorbei als JSON-String umgewandelt ist, damit es nicht ein objectId mehr ist, aber wenn Sie einen objectid aus einem Dokument verwenden, bei In diesem Fall müssen Sie Ihre Serverseite nicht in objectid konvertieren.

Sie benötigen immer den Konstruktor objectId(), wenn Ihr _id-Typ eine Zeichenfolge ist.

0

Vielen Dank für Ihre Antworten.

Eine naheliegende Sache, die in einer MEAN-Anwendung passieren wird, ist, dass die ObjectIds der Dokumente in Zeichenfolgen konvertiert werden, wenn sie als JSON-Objekte konsumiert werden. Das wird die Verwendung von new ObjectId() bei der Aufnahme von Objekten im Frontend, die ihre ID von Mongo zurück in die Datenbank generiert haben, erfordern ...

Jede andere Option als die Verwendung von Mongoose? Ich bin sehr glücklich mit dem Standard-Node-Mongo-Treiber für jetzt neben dieser String-Konvertierung Problem ...

Verwandte Themen