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

PyMongo vs MongoEngine para Django


Esta é uma pergunta antiga, mas tropeçando nela, não acho que a resposta aceita responda à pergunta. A pergunta não era "O que é MongoEngine?" - era "Por que devo usar o MongoEngine?" E as vantagens de tal abordagem. Isso vai além do Django para Python/Mongo em geral. Meus dois centavos:

Enquanto o PyMongo e o MongoEngine retornam objetos (o que não está errado), o PyMongo retorna dicionários que precisam ter suas chaves referenciadas por string. MongoEngine permite que você defina um esquema por meio de classes para seus dados de documento. Ele então mapeará os documentos nessas classes para você e permitirá que você os manipule. Por que definir um esquema para dados sem esquema? Porque, na minha opinião, é claro, explícito e muito mais fácil de programar. Você não acaba com dicionários espalhados pelo seu código onde você não pode dizer o que está neles sem realmente olhar para os dados ou executar o programa. No caso do MongoEngine e um IDE decente como o PyCharm, digite um simples "." depois que o objeto lhe dirá tudo o que você precisa saber por meio do preenchimento automático. Também é muito mais fácil para outros desenvolvedores examinarem e aprenderem o modelo de dados enquanto trabalham e tornarão qualquer pessoa que não tenha visto o código por um tempo mais produtiva e mais rápida.

Além disso, para mim, a sintaxe usada para manipular documentos com o PyMongo (que é essencialmente a mesma do console do mongo) é feia, propensa a erros e difícil de manter.

Aqui está um exemplo básico de atualização de um documento no MongoEngine, que para mim é muito elegante:
BlogPost.objects(id=post.id).update(title='Example Post')

Por que usar o PyMongo? O MongoEngine é uma camada entre você e o bare metal, então provavelmente é mais lento, embora eu não tenha nenhum benchmark. O PyMongo é de nível mais baixo, então naturalmente você tem mais controle. Para projetos simples, o MongoEngine pode ser desnecessário. Se você já é fluente na sintaxe do Mongo, pode achar o PyMongo muito mais intuitivo do que eu e não terá problemas para escrever consultas e atualizações complexas. Talvez você goste de trabalhar diretamente com dicionários nesse nível inferior e não esteja interessado em uma camada adicional de abstração. Talvez você esteja escrevendo um script que não faça parte de um grande sistema e precise que ele seja o mais enxuto e rápido possível.

Há mais no argumento, mas acho que é muito bom para o básico.