能不能先用mongoengine定义一个文档,然后用pymongo插入很多文档?

Can one use mongoengine to define a document first, then use pymongo to insert many documents?

MongoEngine 非常适合定义用于数据验证的文档。该区域缺少原始 pymongo。我可以先使用 MongoEngine 定义一个文档,然后使用 pymongo 将许多文档插入到一个空集合中吗?如果是,pymongo的insertMany()会根据mongoengine设置的文档定义做数据校验吗?

pymongo 和 mongoengine 代码可以混合在同一个 python 脚本中吗?

我正在使用 python 3.7,mongodb v4.2.7。

让我将您的问题分为三个部分。

  1. 我可以将 mongoengine 验证与 pymongo 一起使用吗?
  2. 如果使用 insertmany 那么如何验证?
  3. pymongo 和 mongoengine 代码可以混合在同一个 python 脚本中吗?

答案-:

  1. 不,您不能对 pymongo 使用 mongoengine 验证。因为验证是在 mongoengine 模块中定义的,比如 -:

snap from mongoengine lib -- mongoengine -> common.py:

So, when you use validation in mongoenine these function is called and validate the data. If you want to validate you data for pymongo, then you have to write custom validation code for that.

  1. Insertmany()是独立函数,与mongoengine无关。所以 mongoenine 定义不适用于 Insertmany().
  2. 是的,您可以在同一个 python 脚本中一起编写 pymongo 和 mongoengine 代码。 [在某些情况下我们需要这样做]。

Note -: If you Use both pymongo and mongoenine together. Be careful, Because mongoengine have default validation function. So they check some validation before perform operations. But pymongo not have any validation, They just insert data and create collection [ If not exist ] and then insert data. So may be datatype conflict occur and problem like this.

在 Python 和 Mongo 方面我是新手。我相信您可以像这样使用 MongoEngine 验证每个文档:

for my_obj in my_objs:
    my_obj.validate()

然后,像这样批量插入:

dicts = map(lambda my_obj: my_obj.to_mongo().to_dict(), my_objs)
collection.insert_many(dicts)

但是,如果您不需要直接使用 PyMongo,您也可以使用 MongoEngine 进行批量插入。

你的三个问题:

'Can I use MongoEngine to define a document first, then use pymongo to insertMany documents into an empty collection? '

是的。

'如果是,pymongo的insertMany()会根据mongoengine设置的文档定义做数据校验吗?'

没有

'Can pymongo and mongoengine code be mixed together in the same python script?'

是的。

基于pymongo的Mongoengine。如果您不需要 mongoengine 没有的非常复杂的功能。我建议你只使用 mongoengine 来完成你的工作。这将在大多数情况下节省您的时间。