MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Eval MongoDB-Abfrage mit NodeJS

Die Zeichenfolge, die Sie präsentieren, ist eine Mongodb-Shell-Abfrage. Diese Zeichenfolge enthält mongodb-Shell-spezifische Datentypen und kann als solche nur innerhalb der Mongodb-Shell verwendet werden. Sie können diese Abfragen nicht in einer anderen (Javascript-) Umgebung analysieren oder auswerten, da dies nicht der Fall ist gültiges JSON. Daher eval , oder JSON.parse würde aufgrund der spezifischen Datentypen nicht einmal funktionieren.

Wenn Sie MongoDB-Abfragen für die Verwendung in verschiedenen Umgebungen serialisieren möchten, können Sie MongoDB Extended JSON verwenden.

https://docs.mongodb.org/v3.0/ reference/mongodb-extended-json/

Dies ist Standard-JSON, das MongoDB-Datentypen enthalten kann. Ihre Abfrage möchte dies in MongoDB Extended JSON.

{
    "_id": {
        "$oid": "536b07935c89be214c000009"
    },
    "date": {
        "$date": "2012-12-19T06:01:17.171Z"
    },
    "mail": {
        "$regex": "test",
        "$options": "i"
    }
}

Wenn Sie eine solche Zeichenfolge analysieren oder auswerten möchten, um sie an den mongodb-Treiber von node.js weiterzuleiten, müssen Sie eine Bibliothek verwenden, um diese in ein geeignetes Node.js-MongoDB-Treiberobjekt zu deserialisieren.

Dazu können Sie diese Bibliothek verwenden:
https://www. npmjs.com/package/mongodb-extended-json

Sie können diese Bibliothek auch in Ihrem Browser verwenden, um die Abfragen zu erstellen. Oder Sie könnten die Mongodb-Abfragen von Hand erstellen.

Mir ist kein Plugin / npm-Paket bekannt, mit dem Sie Mongodb-Shell-Abfragen automatisch in MongoDB Extended JSON konvertieren können. Sie könnten versuchen, sie automatisch zu konvertieren, indem Sie einige der Typen selbst implementieren ( ISODate, ObjectId ). Sie werden jedoch nie eine vollständige Kompatibilität zwischen der mongodb-Shell und dem mongodb-nodejs-Treiber haben, viele Methoden haben unterschiedliche Signaturen und Rückgabetypen, Cursor funktionieren anders, etc...

Es gibt auch dieses Projekt, eine Alternative zum offiziell unterstützten mongodb nodejs-Treiber, der versucht, die Shell ein bisschen mehr nachzuahmen, wenn Sie das wirklich schätzen, aber es wird Ihnen bei Ihrer spezifischen Abfrage nicht helfen, Sie müssen immer noch konvertieren it.
https://docs.mongodb.org/ecosystem/ Treiber/node-js/