/ / Ersetzen Sie die ObjectID-Methode für node-mongo-native

Ersetzen Sie die ObjectID-Methode für node-mongo-native - node.js, mongodb, node-mongodb-native

Das im mongo verwendete objectID-Objekt scheint a zu seinwenig schwierig zu handhaben, wenn es darum geht, es mit json hin und her zu wechseln und mit anderen Anwendungen zu kommunizieren. Es scheint, dass ich, um es zu verwenden, zwischen dem Objekt für die Abfrage und dem String für die Json-Nachrichtenübergabe hin und her konvertieren muss.

Ich denke, es wäre großartig für node-mongo-native, meine _id 's standardmäßig als Zeichenketten zu erstellen. So etwas würde ein gutes eindeutiges ID-Generierungssystem ergeben, das auch als Zeitstempel dient:

function createID(){
return (Date.now() + ((Math.round(Math.random()*1000000))/1000000) ).toString();
}

Gibt es eine Möglichkeit für mich, dass node-mongo-native diese Funktion zur ID-Generierung anstelle der Standardeinstellung verwendet?

Antworten:

2 für die Antwort № 1

Ich bin nie auf die Probleme gestoßen, die Sie mit der Konvertierung von ObjectIDs beschrieben haben, aber ich verwende wahrscheinlich einen anderen Technologie-Stack als Sie.

Das _id Das Feld eines MongoDB-Dokuments wird nur dann automatisch als ObjectId generiert, wenn das in der Datenbank gespeicherte Objekt noch kein Feld mit dem Namen enthält _id. Wenn dieses Feld bereits im gespeicherten Dokument vorhanden ist, wird sein Wert als verwendet _id. Wenn Sie also manuell IDs generieren und zuweisen möchten, können Sie dies tun.

Aber ich würde Ihnen vorschlagen, Ihren Algorithmus zu überdenkenzum Generieren von IDs, da es keine garantierten eindeutigen IDs generiert. Es scheint, als würden Sie eine Lösung für ein Problem neu erfinden, das bereits gelöst wurde - gelöst bei der ObjectID - Generierung Ihres Datenbanktreibers ObjectID als Typ ObjectID und würde stattdessen eine Zeichenfolge verwenden. Warum generieren Sie dann keine ObjectID und konvertieren sie in eine Zeichenfolge, bevor Sie sie der _id Ihres Dokuments zuweisen.

 yourDocument._id = new ObjectID().toHexString();

0 für die Antwort № 2

Ich hatte nie Probleme, hin und her zu wechseln, da es automatisch in Zeichenfolge umgewandelt wird, wie in den folgenden Beispielen gezeigt:

> var ObjectID = require("mongodb").ObjectID
undefined

> ObjectID.createPk()
52fcb07f46d17400006f44ac

> typeof ObjectID.createPk()
"object"

> JSON.stringify({_id: ObjectID.createPk()})
"{"_id":"52fcb09346d17400006f44ae"}"

> ObjectID.createPk().toString()
"52fcb09d46d17400006f44af"

Das einzige, was Sie beachten sollten, ist, wenn Sie mit _id eine Abfrage schreiben (um Datensätze abzurufen oder Dinge zu aktualisieren), normalerweise mache ich Folgendes:

exports.getCustomerByID = function (id, callback) {
db.collection("customers").findOne({
_id: new ObjectID(id.toString())
}, callback);
};

Diese Funktion ermöglicht die Übergabe einer ID als Hex-String oder als Mongodb-ObjectID.