MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Évaluer la requête MongoDB avec NodeJS

La chaîne que vous présentez est une requête shell mongodb. Cette chaîne contient des types de données spécifiques au shell mongodb et, en tant que telle, n'est utilisable qu'à l'intérieur du shell mongodb. Vous ne pouvez pas analyser ou évaluer ces requêtes dans un environnement différent (javascript), car elles ne sont pas JSON valide. Par conséquent, eval , ou JSON.parse ne fonctionnerait même pas, à cause des types de données spécifiques.

Si vous souhaitez sérialiser les requêtes mongodb pour les utiliser dans différents environnements, vous pouvez utiliser MongoDB Extended JSON.

https://docs.mongodb.org/v3.0/ référence/mongodb-extended-json/

Il s'agit d'un JSON standard qui peut contenir des types de données mongodb.Votre requête aimerait ceci dans le JSON étendu MongoDB.

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

Si vous souhaitez analyser ou évaluer une chaîne comme celle-ci pour la transmettre au pilote mongodb node.js, vous devez utiliser une bibliothèque pour la désérialiser en un objet pilote Node.js MongoDB approprié.

Vous pouvez utiliser cette bibliothèque pour le faire :
https://www. npmjs.com/package/mongodb-extended-json

Vous pouvez également utiliser cette bibliothèque dans votre navigateur pour créer les requêtes. Ou vous pouvez construire les requêtes mongodb à la main.

Je ne connais pas de package plugin/npm qui vous permettrait de convertir automatiquement les requêtes shell mongodb en MongoDB Extended JSON. Vous pouvez essayer de les convertir automatiquement en implémentant vous-même certains des types ( ISODate, ObjectId ). Cependant, vous n'aurez jamais une compatibilité totale entre le shell mongodb et le pilote mongodb nodejs, de nombreuses méthodes ont des signatures et des types de retour différents, les curseurs fonctionnent différemment, etc...

Il y a aussi ce projet, une alternative au pilote mongodb nodejs officiellement pris en charge, qui essaie d'imiter un peu plus le shell si vous l'appréciez vraiment, mais cela ne vous aidera pas avec votre requête spécifique, vous devrez toujours convertir il.
https://docs.mongodb.org/ecosystem/ pilotes/node-js/