MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Eval MongoDB Query com NodeJS


A string que você está apresentando é uma consulta do shell mongodb. Essa string contém tipos de dados específicos do shell mongodb e, como tal, só pode ser usado dentro do shell mongodb. Você não pode analisar ou avaliar essas consultas em um ambiente diferente (javascript), porque elas não são JSON válido. Portanto, eval , ou JSON.parse nem funcionaria, por causa dos tipos de dados específicos.

Se você deseja serializar consultas do mongodb para uso em diferentes ambientes, você pode usar o MongoDB Extended JSON.

https://docs.mongodb.org/v3.0/ referência/mongodb-extended-json/

Este é o JSON padrão que pode conter tipos de dados do mongodb. Sua consulta gostaria disso no JSON estendido do MongoDB.
{
    "_id": {
        "$oid": "536b07935c89be214c000009"
    },
    "date": {
        "$date": "2012-12-19T06:01:17.171Z"
    },
    "mail": {
        "$regex": "test",
        "$options": "i"
    }
}

Se você quiser analisar ou avaliar uma string como essa para passá-la ao driver node.js mongodb, será necessário usar uma biblioteca para desserializar isso para um objeto Node.js MongoDB Driver adequado.

Você pode usar esta biblioteca para fazer isso:
https://www. npmjs.com/package/mongodb-extended-json

Você também pode usar essa biblioteca em seu navegador para criar as consultas. Ou você pode criar as consultas do mongodb manualmente.

Não estou ciente do pacote plugin / npm que permitiria converter consultas de shell mongodb para MongoDB Extended JSON automaticamente. Você pode tentar convertê-los automaticamente implementando alguns dos tipos você mesmo ( ISODate, ObjectId ). No entanto, você nunca terá uma compatibilidade total entre o shell mongodb e o driver mongodb nodejs, muitos métodos têm assinaturas e tipos de retorno diferentes, cursores funcionam de maneira diferente, etc...

Há também este projeto, uma alternativa ao driver mongodb nodejs oficialmente suportado, que tenta imitar um pouco mais o shell se você realmente valoriza isso, mas não o ajudará com sua consulta específica, você ainda precisará converter isso.
https://docs.mongodb.org/ecosystem/ drivers/node-js/