collection --集合级操作

Mongo的集合级实用程序。

pymongo.ASCENDING = 1

升序排序顺序。

pymongo.DESCENDING = -1

降序排序。

pymongo.GEO2D = '2d'

二维的索引说明符 geospatial index .

pymongo.GEOHAYSTACK = 'geoHaystack'

DEPRECATED -二维的索引说明符 haystack index .

DEPRECATED - GEOHAYSTACK 已弃用,将在PyMongo 4.0中删除。geoHaystack索引(和geoSearch命令)在mongodb4.4中被弃用。相反,创建一个二维索引并使用$geonore或$geoWithin。看到了吗https://dochub.mongodb.org/core/4.4-deprecate-geohastack。

在 3.11 版更改: 已弃用。

pymongo.GEOSPHERE = '2dsphere'

的索引说明符 spherical geospatial index .

2.5 新版功能.

pymongo.HASHED = 'hashed'

的索引说明符 hashed index .

2.5 新版功能.

pymongo.TEXT = 'text'

的索引说明符 text index .

参见

MongoDB的 Atlas Search 它提供了更高级的文本搜索功能。

2.7.1 新版功能.

class pymongo.collection.ReturnDocument

与一起使用的枚举 find_one_and_replace()find_one_and_update() .

BEFORE

在更新/替换原始文档之前将其返回,或 None 如果没有与查询匹配的文档。

AFTER

返回更新/替换或插入的文档。

class pymongo.collection.Collection(database, name, create=False, **kwargs)

获取/创建Mongo集合。

Raises TypeError if name is not an instance of basestring (str in python 3). Raises InvalidName if name is not a valid collection name. Any additional keyword arguments will be used as options passed to the create command. See create_collection() for valid options.

如果 createTruecollation 或者存在任何其他关键字参数,则 create 命令将被发送,使用 session 如有规定。否则,a create 命令将不被发送,集合将在第一次使用时隐式创建。可选的 session 论证是 only 用于 create 命令,它在之后不与集合关联。

参数
  • database :要从中获取集合的数据库

  • name :要获取的集合的名称

  • create (可选):如果 True ,即使未设置选项也强制创建集合

  • codec_options (可选):的实例 CodecOptions .如果 None (默认值)database.codec_选项被使用。

  • read_preference (可选):要使用的读取首选项。如果 None (默认值)数据库首选项读取被使用。

  • write_concern (可选):的实例 WriteConcern .如果 None (默认值)database.write_问题被使用。

  • read_concern (可选):的实例 ReadConcern .如果 None (默认值)数据库.read_关注点被使用。

  • collation (可选):的实例 Collation . 如果提供了排序规则,它将传递给create collection命令。此选项仅在MongoDB 3.4及更高版本上受支持。

  • session (可选):a ClientSession 与create collection命令一起使用的

  • **kwargs (可选):其他关键字参数将作为createcollection命令的选项传递

在 3.6 版更改: 补充 session 参数。

在 3.4 版更改: 支持 collation 选择权。

在 3.2 版更改: 添加了read_关注点选项。

在 3.0 版更改: 添加了编解码器选项、读首选项和写入问题选项。删除了uuid_子类型属性。 Collection 不再返回 Collection 对于带前导下划线的属性名。您必须改用dict样式的查找::

collection['__my_collection__']

不是:

collection.__my_collection__

在 2.2 版更改: 已删除参数:已删除的选项

2.1 新版功能: uuid_子类型属性

参见

MongoDB文档

collections

c[name] || c.name

得到 name 子集合 Collection c .

加薪 InvalidName 如果使用了无效的集合名称。

full_name

这个的全名 Collection .

全名的形式是 database_name.collection_name .

name

这个名字 Collection .

database

这个 Database 这个 Collection 是的一部分。

codec_options

只读访问 CodecOptions 这个例子。

read_preference

对此实例的“读取”首选项的只读访问。

在 3.0 版更改: 这个 read_preference 属性现在是只读的。

write_concern

只读访问 WriteConcern 这个例子。

在 3.0 版更改: 这个 write_concern 属性现在是只读的。

read_concern

只读访问 ReadConcern 这个例子。

3.2 新版功能.

with_options(codec_options=None, read_preference=None, write_concern=None, read_concern=None)

通过更改指定的设置获取此集合的克隆。

>>> coll1.read_preference
Primary()
>>> from pymongo import ReadPreference
>>> coll2 = coll1.with_options(read_preference=ReadPreference.SECONDARY)
>>> coll1.read_preference
Primary()
>>> coll2.read_preference
Secondary(tag_sets=None)
参数
bulk_write(requests, ordered=True, bypass_document_validation=False, session=None)

向服务器发送一批写操作。

请求作为写入操作实例的列表传递( InsertOneUpdateOneUpdateManyReplaceOneDeleteOneDeleteMany

>>> for doc in db.test.find({}):
...     print(doc)
...
{u'x': 1, u'_id': ObjectId('54f62e60fba5226811f634ef')}
{u'x': 1, u'_id': ObjectId('54f62e60fba5226811f634f0')}
>>> # DeleteMany, UpdateOne, and UpdateMany are also available.
...
>>> from pymongo import InsertOne, DeleteOne, ReplaceOne
>>> requests = [InsertOne({'y': 1}), DeleteOne({'x': 1}),
...             ReplaceOne({'w': 1}, {'z': 1}, upsert=True)]
>>> result = db.test.bulk_write(requests)
>>> result.inserted_count
1
>>> result.deleted_count
1
>>> result.modified_count
0
>>> result.upserted_ids
{2: ObjectId('54f62ee28891e756a6e1abd5')}
>>> for doc in db.test.find({}):
...     print(doc)
...
{u'x': 1, u'_id': ObjectId('54f62e60fba5226811f634f0')}
{u'y': 1, u'_id': ObjectId('54f62ee2fba5226811f634f1')}
{u'z': 1, u'_id': ObjectId('54f62ee28891e756a6e1abd5')}
参数
  • requests :写操作的列表(参见上面的示例)。

  • ordered (可选):如果 True (默认)请求将按提供的顺序在服务器上串行执行。如果发生错误,所有剩余操作都将中止。如果 False 请求将在服务器上以任意顺序执行,可能是并行的,并且将尝试所有操作。

  • bypass_document_validation :(可选)如果 True ,允许写入选择退出文档级验证。默认为 False .

  • session (可选):a ClientSession .

返回

的实例 BulkWriteResult .

注解

bypass_document_validation 需要服务器版本 >= 3.2

在 3.6 版更改: 补充 session 参数。

在 3.2 版更改: 增加了旁路文件验证支持

3.0 新版功能.

insert_one(document, bypass_document_validation=False, session=None)

插入单个文档。

>>> db.test.count_documents({'x': 1})
0
>>> result = db.test.insert_one({'x': 1})
>>> result.inserted_id
ObjectId('54f112defba522406c9cc208')
>>> db.test.find_one({'x': 1})
{u'x': 1, u'_id': ObjectId('54f112defba522406c9cc208')}
参数
  • document :要插入的文档。必须是可变映射类型。如果文档没有_id字段,则会自动添加一个。

  • bypass_document_validation :(可选)如果 True ,允许写入选择退出文档级验证。默认为 False .

  • session (可选):a ClientSession .

返回

注解

bypass_document_validation 需要服务器版本 >= 3.2

在 3.6 版更改: 补充 session 参数。

在 3.2 版更改: 增加了旁路文件验证支持

3.0 新版功能.

insert_many(documents, ordered=True, bypass_document_validation=False, session=None)

插入一份文件。

>>> db.test.count_documents({})
0
>>> result = db.test.insert_many([{'x': i} for i in range(2)])
>>> result.inserted_ids
[ObjectId('54f113fffba522406c9cc20e'), ObjectId('54f113fffba522406c9cc20f')]
>>> db.test.count_documents({})
2
参数
  • documents :要插入的一系列文档。

  • ordered (可选):如果 True (默认设置)文档将按提供的顺序串行插入服务器。如果发生错误,所有剩余的插入都将中止。如果 False ,文档将以任意顺序(可能是并行)插入到服务器上,并且将尝试所有文档插入。

  • bypass_document_validation :(可选)如果 True ,允许写入选择退出文档级验证。默认为 False .

  • session (可选):a ClientSession .

返回

的实例 InsertManyResult .

注解

bypass_document_validation 需要服务器版本 >= 3.2

在 3.6 版更改: 补充 session 参数。

在 3.2 版更改: 增加了旁路文件验证支持

3.0 新版功能.

replace_one(filter, replacement, upsert=False, bypass_document_validation=False, collation=None, hint=None, session=None)

替换与筛选器匹配的单个文档。

>>> for doc in db.test.find({}):
...     print(doc)
...
{u'x': 1, u'_id': ObjectId('54f4c5befba5220aa4d6dee7')}
>>> result = db.test.replace_one({'x': 1}, {'y': 1})
>>> result.matched_count
1
>>> result.modified_count
1
>>> for doc in db.test.find({}):
...     print(doc)
...
{u'y': 1, u'_id': ObjectId('54f4c5befba5220aa4d6dee7')}

这个 更新插入 选项可用于在不存在匹配文档的情况下插入新文档。

>>> result = db.test.replace_one({'x': 1}, {'x': 1}, True)
>>> result.matched_count
0
>>> result.modified_count
0
>>> result.upserted_id
ObjectId('54f11e5c8891e756a6e1abd4')
>>> db.test.find_one({'x': 1})
{u'x': 1, u'_id': ObjectId('54f11e5c8891e756a6e1abd4')}
参数
  • filter :与要替换的文档匹配的查询。

  • replacement :新文档。

  • upsert (可选):如果 True ,如果没有与筛选器匹配的文档,则执行插入。

  • bypass_document_validation :(可选)如果 True ,允许写入选择退出文档级验证。默认为 False . 此选项仅在MongoDB 3.2及更高版本上受支持。

  • collation (可选):的实例 Collation . 此选项仅在MongoDB 3.4及更高版本上受支持。

  • hint (可选):用于支持由字符串名称指定的查询谓词,或使用与传递给的相同格式指定的查询谓词 create_index() (例如) [('field', ASCENDING)] ). 此选项仅在MongoDB 4.2及更高版本上受支持。

  • session (可选):a ClientSession .

返回

在 3.11 版更改: 补充 hint 参数。

在 3.6 版更改: 补充 session 参数。

在 3.4 版更改: 增加了 collation 选择权。

在 3.2 版更改: 添加了绕过文档验证支持。

3.0 新版功能.

update_one(filter, update, upsert=False, bypass_document_validation=False, collation=None, array_filters=None, hint=None, session=None)

更新与筛选器匹配的单个文档。

>>> for doc in db.test.find():
...     print(doc)
...
{u'x': 1, u'_id': 0}
{u'x': 1, u'_id': 1}
{u'x': 1, u'_id': 2}
>>> result = db.test.update_one({'x': 1}, {'$inc': {'x': 3}})
>>> result.matched_count
1
>>> result.modified_count
1
>>> for doc in db.test.find():
...     print(doc)
...
{u'x': 4, u'_id': 0}
{u'x': 1, u'_id': 1}
{u'x': 1, u'_id': 2}
参数
  • filter :与要更新的文档匹配的查询。

  • update :要应用的修改。

  • upsert (可选):如果 True ,如果没有与筛选器匹配的文档,则执行插入。

  • bypass_document_validation :(可选)如果 True ,允许写入选择退出文档级验证。默认为 False . 此选项仅在MongoDB 3.2及更高版本上受支持。

  • collation (可选):的实例 Collation . 此选项仅在MongoDB 3.4及更高版本上受支持。

  • array_filters (可选):筛选器列表,指定应应用更新的数组元素。此选项仅在MongoDB 3.6及更高版本上受支持。

  • hint (可选):用于支持由字符串名称指定的查询谓词,或使用与传递给的相同格式指定的查询谓词 create_index() (例如) [('field', ASCENDING)] ). 此选项仅在MongoDB 4.2及更高版本上受支持。

  • session (可选):a ClientSession .

返回

在 3.11 版更改: 补充 hint 参数。

在 3.9 版更改: 添加了接受管道作为 update .

在 3.6 版更改: 增加了 array_filterssession 参数。

在 3.4 版更改: 增加了 collation 选择权。

在 3.2 版更改: 补充 bypass_document_validation 支持。

3.0 新版功能.

update_many(filter, update, upsert=False, array_filters=None, bypass_document_validation=False, collation=None, hint=None, session=None)

更新一个或多个与筛选器匹配的文档。

>>> for doc in db.test.find():
...     print(doc)
...
{u'x': 1, u'_id': 0}
{u'x': 1, u'_id': 1}
{u'x': 1, u'_id': 2}
>>> result = db.test.update_many({'x': 1}, {'$inc': {'x': 3}})
>>> result.matched_count
3
>>> result.modified_count
3
>>> for doc in db.test.find():
...     print(doc)
...
{u'x': 4, u'_id': 0}
{u'x': 4, u'_id': 1}
{u'x': 4, u'_id': 2}
参数
  • filter :与要更新的文档匹配的查询。

  • update :要应用的修改。

  • upsert (可选):如果 True ,如果没有与筛选器匹配的文档,则执行插入。

  • bypass_document_validation (可选):如果 True ,允许写入选择退出文档级验证。默认为 False . 此选项仅在MongoDB 3.2及更高版本上受支持。

  • collation (可选):的实例 Collation . 此选项仅在MongoDB 3.4及更高版本上受支持。

  • array_filters (可选):筛选器列表,指定应应用更新的数组元素。此选项仅在MongoDB 3.6及更高版本上受支持。

  • hint (可选):用于支持由字符串名称指定的查询谓词,或使用与传递给的相同格式指定的查询谓词 create_index() (例如) [('field', ASCENDING)] ). 此选项仅在MongoDB 4.2及更高版本上受支持。

  • session (可选):a ClientSession .

返回

在 3.11 版更改: 补充 hint 参数。

在 3.9 版更改: 添加了接受管道作为 update .

在 3.6 版更改: 补充 array_filterssession 参数。

在 3.4 版更改: 增加了 collation 选择权。

在 3.2 版更改: 添加了绕过文档验证支持。

3.0 新版功能.

delete_one(filter, collation=None, hint=None, session=None)

删除与筛选器匹配的单个文档。

>>> db.test.count_documents({'x': 1})
3
>>> result = db.test.delete_one({'x': 1})
>>> result.deleted_count
1
>>> db.test.count_documents({'x': 1})
2
参数
  • filter :与要删除的文档匹配的查询。

  • collation (可选):的实例 Collation . 此选项仅在MongoDB 3.4及更高版本上受支持。

  • hint (可选):用于支持由字符串名称指定的查询谓词,或使用与传递给的相同格式指定的查询谓词 create_index() (例如) [('field', ASCENDING)] ). 此选项仅在MongoDB 4.4及更高版本上受支持。

  • session (可选):a ClientSession .

返回

在 3.11 版更改: 补充 hint 参数。

在 3.6 版更改: 补充 session 参数。

在 3.4 版更改: 增加了 collation 选择权。

3.0 新版功能.

delete_many(filter, collation=None, hint=None, session=None)

删除一个或多个与筛选器匹配的文档。

>>> db.test.count_documents({'x': 1})
3
>>> result = db.test.delete_many({'x': 1})
>>> result.deleted_count
3
>>> db.test.count_documents({'x': 1})
0
参数
  • filter :与要删除的文档匹配的查询。

  • collation (可选):的实例 Collation . 此选项仅在MongoDB 3.4及更高版本上受支持。

  • hint (可选):用于支持由字符串名称指定的查询谓词,或使用与传递给的相同格式指定的查询谓词 create_index() (例如) [('field', ASCENDING)] ). 此选项仅在MongoDB 4.4及更高版本上受支持。

  • session (可选):a ClientSession .

返回

在 3.11 版更改: 补充 hint 参数。

在 3.6 版更改: 补充 session 参数。

在 3.4 版更改: 增加了 collation 选择权。

3.0 新版功能.

aggregate(pipeline, session=None, **kwargs)

使用此集合上的聚合框架执行聚合。

全部可选 aggregate command 参数应作为关键字参数传递给此方法。有效选项包括但不限于:

  • allowDiskUse (bool):允许写入临时文件。当设置为True时,聚合阶段可以将数据写入--dbpath目录的u tmp子目录。默认值为False。

  • maxTimeMS (int):允许操作运行的最长时间(毫秒)。

  • batchSize (int):每批返回的最大文档数。如果连接的mongod或mongos不支持使用游标返回聚合结果,则忽略,或者 useCursorFalse .

  • collation (可选):的实例 Collation . 此选项仅在MongoDB 3.4及更高版本上受支持。

  • useCursor (bool):已弃用。将在pymongo4.0中删除。

这个 aggregate() 方法遵循 read_preference 其中 Collection ,除非 $out$merge 在这种情况下 PRIMARY 使用。

注解

此方法不支持“explain”选项。请使用 command() 相反。示例包含在 聚合框架 文档。

注解

这个 write_concern 当使用MongoDB>=3.4时,将自动应用此集合的。

参数
  • pipeline :聚合管道阶段的列表

  • session (可选):a ClientSession .

  • **kwargs (可选):请参阅上面的选项列表。

返回

A CommandCursor 在结果集上。

在 3.9 版更改: 将此集合的读取关注点应用于包含 $out 连接到MongoDB>=4.2时阶段。添加了对 $merge 管道阶段。写入的聚合始终使用读取首选项 PRIMARY .

在 3.6 版更改: 增加了 session 参数。添加了 maxAwaitTimeMS 选项。已弃用 useCursor 选择权。

在 3.4 版更改: 当连接到MongoDB>=3.4时,将此集合的写入问题自动应用于此操作。支持 collation 选择权。

在 3.0 版更改: 这个 aggregate() 方法始终返回CommandCursor。管道参数必须是列表。

在 2.7 版更改: 使用cursor选项时,返回 CommandCursor 而不是 Cursor .

在 2.6 版更改: 增加了光标支持。

2.3 新版功能.

参见

聚合示例

aggregate_raw_batches(pipeline, **kwargs)

执行聚合并检索批原始BSON。

类似于 aggregate() 方法,但返回 RawBatchCursor .

这个例子演示了如何使用原始批处理,但实际上,原始批处理应该传递给一个外部库,该库可以将BSON解码为另一个数据类型,而不是与PyMongo一起使用 bson 模块。

>>> import bson
>>> cursor = db.test.aggregate_raw_batches([
...     {'$project': {'x': {'$multiply': [2, '$x']}}}])
>>> for batch in cursor:
...     print(bson.decode_all(batch))

注解

聚合“原始”批处理不支持会话或自动加密。

3.6 新版功能.

watch(pipeline=None, full_document=None, resume_after=None, max_await_time_ms=None, batch_size=None, collation=None, start_at_operation_time=None, session=None, start_after=None)

查看此集合的更改。

使用隐式初始值执行聚合 $changeStream 阶段和返回 CollectionChangeStream 遍历此集合上的更改的游标。

在MongoDB 3.6中引入。

with db.collection.watch() as stream:
    for change in stream:
        print(change)

这个 CollectionChangeStream iterable块,直到返回下一个更改文档或引发错误。如果 next() 方法在从服务器检索批处理时遇到网络错误,它将自动尝试重新创建游标,以便不会丢失任何更改事件。在恢复尝试期间遇到的任何错误都表明可能发生了中断,并将引发该错误。

try:
    with db.collection.watch(
            [{'$match': {'operationType': 'insert'}}]) as stream:
        for insert_change in stream:
            print(insert_change)
except pymongo.errors.PyMongoError:
    # The ChangeStream encountered an unrecoverable error or the
    # resume attempt failed to recreate the cursor.
    logging.error('...')

有关恢复过程的精确描述,请参见 change streams specification .

注解

使用此帮助程序方法比直接调用 aggregate() 用一个 $changeStream 阶段,以支持可恢复性。

警告

这个系列的 read_concern 必须是 ReadConcern("majority") 为了使用 $changeStream 阶段。

参数
  • pipeline (可选):要附加到初始的聚合管道阶段的列表 $changeStream 舞台。不是所有管道阶段在 $changeStream stage,请参阅MongoDB文档中有关变更流的支持阶段。

  • full_document (可选):作为选项传递给 $changeStream 舞台。允许值:“updateLookup”。当设置为“updateLookup”时,部分更新的更改通知将包括描述文档更改的增量,以及更改发生后某个时间更改的整个文档的副本。

  • resume_after (可选):恢复令牌。如果提供,更改流将开始返回在resume令牌中指定的操作之后直接发生的更改。恢复令牌是更改文档的u id值。

  • max_await_time_ms (可选):服务器在响应getMore操作之前等待更改的最长时间(毫秒)。

  • batch_size (可选):每批要返回的最大文档数。

  • collation (可选):The Collation 用于聚合。

  • start_at_operation_time (可选):如果提供,则生成的更改流将只返回在指定的 Timestamp . 需要MongoDB>=4.0。

  • session (可选):a ClientSession .

  • start_after (可选):与 resume_after 除了那个 start_after 可以在失效事件后恢复通知。此选项和 resume_after 相互排斥。

返回

A CollectionChangeStream 光标。

在 3.9 版更改: 增加了 start_after 参数。

在 3.7 版更改: 增加了 start_at_operation_time 参数。

3.6 新版功能.

参见

MongoDB文档

changeStreams

find(filter=None, projection=None, skip=0, limit=0, no_cursor_timeout=False, cursor_type=CursorType.NON_TAILABLE, sort=None, allow_partial_results=False, oplog_replay=False, modifiers=None, batch_size=0, manipulate=True, collation=None, hint=None, max_scan=None, max_time_ms=None, max=None, min=None, return_key=False, show_record_id=False, snapshot=False, comment=None, session=None)

查询数据库。

这个 filter 参数是所有结果都必须匹配的原型文档。例如:

>>> db.test.find({"hello": "world"})

只匹配具有关键字“hello”和值“world”的文档。火柴可以有其他钥匙 此外 “你好”。这个 projection 参数用于指定应包含在结果文档中的字段子集。通过将结果限制到某个字段子集,可以减少网络流量和解码时间。

加薪 TypeError 如果任何参数的类型不正确。返回的实例 Cursor 对应于此查询。

这个 find() 方法遵循 read_preference 其中 Collection .

参数
  • filter (可选):子对象,指定要包含在结果集中的文档必须存在的元素

  • projection (optional): a list of field names that should be returned in the result set or a dict specifying the fields to include or exclude. If projection is a list "_id" will always be returned. Use a dict to exclude fields from the result (e.g. projection={'_id': False}).

  • session (可选):a ClientSession .

  • skip (可选):返回结果时要忽略的文档数(从结果集开始)

  • limit (可选):要返回的最大结果数。限制为0(默认值)相当于不设置限制。

  • no_cursor_timeout (可选):如果为False(默认值),服务器将在10分钟不活动后关闭任何返回的游标。如果设置为True,则返回的游标在服务器上永远不会超时。应注意确保未打开“无光标超时”的游标已正确关闭。

  • cursor_type (可选):要返回的光标类型。有效选项由定义 CursorType

    • NON_TAILABLE -此find调用的结果将在结果集上返回一个标准光标。

    • TAILABLE -这个find调用的结果是一个可裁剪的游标-可裁剪的游标只用于capped集合。当检索到最后一个数据时,它们不会关闭,而是保持打开状态,光标位置标记最终文档位置。如果收到更多的数据,光标的迭代将从最后一个收到的文档开始继续。有关详细信息,请参见 tailable cursor documentation .

    • TAILABLE_AWAIT -这个find调用的结果将是一个设置了await标志的可裁剪游标。在返回完整的结果集之后,服务器将等待几秒钟,以便可以捕获并返回在查询期间添加的其他数据。

    • EXHAUST -这个find调用的结果将是一个耗尽光标。MongoDB将批处理结果流式传输到客户端,而不等待客户端请求每个批处理,从而减少延迟。请参阅下面关于兼容性的说明。

  • sort (可选):指定此查询的排序顺序的(键、方向)对列表。看到了吗 sort() 有关详细信息。

  • allow_partial_results (可选):如果为True,则mongos将在某些碎片关闭时返回部分结果,而不是返回错误。

  • oplog_replay (可选): DEPRECATED -如果为True,则设置oplogReplay查询标志。默认值:False。

  • batch_size (可选):限制单个批中返回的文档数。

  • manipulate (可选): DEPRECATED -如果为True,请在返回之前应用所有传出子操纵器。默认值:True。

  • collation (可选):的实例 Collation . 此选项仅在MongoDB 3.4及更高版本上受支持。

  • return_key (可选):如果为True,则仅返回每个文档中的索引键。

  • show_record_id (可选):如果为True,则添加一个字段 $recordId 在每个文档中使用存储引擎的内部记录标识符。

  • snapshot (可选): DEPRECATED -如果为True,则阻止光标由于中间的写入操作而多次返回文档。

  • hint (可选):索引,格式与传递给 create_index() (例如) [('field', ASCENDING)] ). 把这个作为呼叫的替代 hint() 在游标上告诉Mongo要用于查询的正确索引。

  • max_time_ms (可选):指定查询操作的时间限制。如果超过指定的时间,操作将中止,并且 ExecutionTimeout 提高了。把这个作为呼叫的替代 max_time_ms() 在光标上。

  • max_scan (可选): DEPRECATED -要扫描的最大文档数。把这个作为呼叫的替代 max_scan() 在光标上。

  • min (可选):按顺序指定特定索引的所有键的包含下限的字段、限制对的列表。把这个作为呼叫的替代 min() 在光标上。 hint 还必须传递,以确保查询使用正确的索引。

  • max (可选):字段、限制对的列表,按顺序指定特定索引的所有键的独占上限。把这个作为呼叫的替代 max() 在光标上。 hint 还必须传递,以确保查询使用正确的索引。

  • comment (可选):附加到查询的字符串,以帮助解释和跟踪服务器日志和配置文件数据中的操作。把这个作为呼叫的替代 comment() 在光标上。

  • modifiers (可选): DEPRECATED -指定其他MongoDB查询修饰符的dict。请改用上面列出的关键字参数。

  • allow_disk_use (可选):如果为True,MongoDB在处理分块排序操作时可能会使用临时磁盘文件来存储超过系统内存限制的数据。如果MongoDB可以使用索引满足指定的排序,或者如果阻塞排序所需的内存少于100mib限制,则该选项无效。此选项仅在MongoDB 4.4及更高版本上受支持。

注解

使用时有许多注意事项 EXHAUST 作为光标类型:

  • 这个 limit 选项不能与排气光标一起使用。

  • mongos不支持Exhaust游标,因此不能与sharded cluster一起使用。

  • A Cursor 使用创建的实例 EXHAUST 游标类型需要独占 socket 连接到MongoDB。如果 Cursor 在没有完全迭代底层的情况下被丢弃 socket 连接将关闭并丢弃,而不会返回到连接池。

在 3.11 版更改: 增加了 allow_disk_use 选项。已弃用 oplog_replay 选项。MongoDB 4.4中不支持此选项。查询引擎现在自动针对oplog优化查询,而不需要设置此选项。

在 3.7 版更改: 贬低 snapshot 选项,在MongoDB 3.6中已弃用,在MongoDB 4.0中已删除。已弃用 max_scan 选项。MongoDB 4.0不支持此选项。使用 max_time_ms 而是限制服务器端的执行时间。

在 3.6 版更改: 补充 session 参数。

在 3.5 版更改: 增加了选项 return_keyshow_record_idsnapshothintmax_time_msmax_scanminmaxcomment . 已弃用 modifiers 选择权。

在 3.4 版更改: 增加了对 collation 选择权。

在 3.0 版更改: 更改了参数名称 specfieldstimeoutpartialfilterprojectionno_cursor_timeoutallow_partial_results 分别。添加了 cursor_typeoplog_replaymodifiers 选项。移除了 network_timeoutread_preferencetag_setssecondary_acceptable_latency_msmax_scansnapshottailableawait_dataexhaustas_class ,以及从属参数。远离的 compile_re 选项:PyMongo现在总是将BSON正则表达式表示为 Regex 物体。使用 try_compile() 尝试从BSON正则表达式转换为Python正则表达式对象。Soft已弃用 manipulate 选择权。

在 2.7 版更改: 补充 compile_re 选项。如果设置为False,PyMongo将BSON正则表达式表示为 Regex 对象,而不是尝试将BSON正则表达式编译为Python本机正则表达式,从而防止某些不兼容模式出现错误,请参阅 PYTHON-500 .

在 2.3 版更改: 增加了 tag_setssecondary_acceptable_latency_ms 参数。

参见

MongoDB文档

find

find_raw_batches(filter=None, projection=None, skip=0, limit=0, no_cursor_timeout=False, cursor_type=CursorType.NON_TAILABLE, sort=None, allow_partial_results=False, oplog_replay=False, modifiers=None, batch_size=0, manipulate=True, collation=None, hint=None, max_scan=None, max_time_ms=None, max=None, min=None, return_key=False, show_record_id=False, snapshot=False, comment=None)

查询数据库并检索批原始BSON。

类似于 find() 方法,但返回 RawBatchCursor .

这个例子演示了如何使用原始批处理,但实际上,原始批处理应该传递给一个外部库,该库可以将BSON解码为另一个数据类型,而不是与PyMongo一起使用 bson 模块。

>>> import bson
>>> cursor = db.test.find_raw_batches()
>>> for batch in cursor:
...     print(bson.decode_all(batch))

注解

find_raw_批处理不支持会话或自动加密。

3.6 新版功能.

find_one(filter=None, *args, **kwargs)

从数据库中获取一个文档。

所有参数 find() 也是的有效参数 find_one() ,尽管有 limit 参数将被忽略。返回单个文档,或 None 如果没有找到匹配的文档。

这个 find_one() 方法遵循 read_preference 其中 Collection .

参数
  • filter (可选):指定要执行的查询或用作查询值的任何其他类型的字典 "_id" .

  • *args (可选):任何附加的位置参数都与 find() .

  • **kwargs (可选):任何其他关键字参数都与 find() .

    >>> collection.find_one(max_time_ms=100)
    
find_one_and_delete(filter, projection=None, sort=None, hint=None, session=None, **kwargs)

查找单个文档并将其删除,然后返回该文档。

>>> db.test.count_documents({'x': 1})
2
>>> db.test.find_one_and_delete({'x': 1})
{u'x': 1, u'_id': ObjectId('54f4e12bfba5220aa4d6dee8')}
>>> db.test.count_documents({'x': 1})
1

如果多个文档匹配 滤波器 ,A sort 可以应用。

>>> for doc in db.test.find({'x': 1}):
...     print(doc)
...
{u'x': 1, u'_id': 0}
{u'x': 1, u'_id': 1}
{u'x': 1, u'_id': 2}
>>> db.test.find_one_and_delete(
...     {'x': 1}, sort=[('_id', pymongo.DESCENDING)])
{u'x': 1, u'_id': 2}

这个 投影 选项可用于限制返回的字段。

>>> db.test.find_one_and_delete({'x': 1}, projection={'_id': False})
{u'x': 1}
参数
  • filter :与要删除的文档匹配的查询。

  • projection (optional): a list of field names that should be returned in the result document or a mapping specifying the fields to include or exclude. If projection is a list "_id" will always be returned. Use a mapping to exclude fields from the result (e.g. projection={'_id': False}).

  • sort (可选):指定查询排序顺序的(键、方向)对列表。如果多个文档与查询匹配,则对它们进行排序并删除第一个文档。

  • hint (可选):用于支持由字符串名称指定的查询谓词,或使用与传递给的相同格式指定的查询谓词 create_index() (例如) [('field', ASCENDING)] ). 此选项仅在MongoDB 4.4及更高版本上受支持。

  • session (可选):a ClientSession .

  • **kwargs (可选):其他命令参数可以作为关键字参数传递(例如,maxTimeMS可用于最新的服务器版本)。

在 3.11 版更改: 补充 hint 参数。

在 3.6 版更改: 补充 session 参数。

在 3.2 版更改: 尊重写关心。

警告

从pymongo3.2开始,这个命令使用 WriteConcern 其中 Collection 当连接到MongoDB时>=3.2。请注意,与使用默认写入关注点相比,在该命令中使用提升的写入关注点可能会慢一些。

在 3.4 版更改: 增加了 collation 选择权。

3.0 新版功能.

find_one_and_replace(filter, replacement, projection=None, sort=None, return_document=ReturnDocument.BEFORE, hint=None, session=None, **kwargs)

查找单个文档并替换它,返回原始文档或替换文档。

这个 find_one_and_replace() 方法不同于 find_one_and_update() 替换匹配的文档 滤波器 ,而不是修改现有文档。

>>> for doc in db.test.find({}):
...     print(doc)
...
{u'x': 1, u'_id': 0}
{u'x': 1, u'_id': 1}
{u'x': 1, u'_id': 2}
>>> db.test.find_one_and_replace({'x': 1}, {'y': 1})
{u'x': 1, u'_id': 0}
>>> for doc in db.test.find({}):
...     print(doc)
...
{u'y': 1, u'_id': 0}
{u'x': 1, u'_id': 1}
{u'x': 1, u'_id': 2}
参数
  • filter :与要替换的文档匹配的查询。

  • replacement :替换文档。

  • projection (optional): A list of field names that should be returned in the result document or a mapping specifying the fields to include or exclude. If projection is a list "_id" will always be returned. Use a mapping to exclude fields from the result (e.g. projection={'_id': False}).

  • sort (可选):指定查询排序顺序的(键、方向)对列表。如果多个文档与查询匹配,则对它们进行排序并替换第一个文档。

  • upsert (可选):何时 True ,如果没有与查询匹配的文档,则插入新文档。默认为 False .

  • return_document 如果 ReturnDocument.BEFORE (默认),返回替换前的原始文档,或 None 如果没有匹配的文档。如果 ReturnDocument.AFTER ,返回被替换或插入的文档。

  • hint (可选):用于支持由字符串名称指定的查询谓词,或使用与传递给的相同格式指定的查询谓词 create_index() (例如) [('field', ASCENDING)] ). 此选项仅在MongoDB 4.4及更高版本上受支持。

  • session (可选):a ClientSession .

  • **kwargs (可选):其他命令参数可以作为关键字参数传递(例如,maxTimeMS可用于最新的服务器版本)。

在 3.11 版更改: 增加了 hint 选择权。

在 3.6 版更改: 补充 session 参数。

在 3.4 版更改: 增加了 collation 选择权。

在 3.2 版更改: 尊重写关心。

警告

从pymongo3.2开始,这个命令使用 WriteConcern 其中 Collection 当连接到MongoDB时>=3.2。请注意,与使用默认写入关注点相比,在该命令中使用提升的写入关注点可能会慢一些。

3.0 新版功能.

find_one_and_update(filter, update, projection=None, sort=None, return_document=ReturnDocument.BEFORE, array_filters=None, hint=None, session=None, **kwargs)

查找单个文档并更新它,返回原始文档或更新的文档。

>>> db.test.find_one_and_update(
...    {'_id': 665}, {'$inc': {'count': 1}, '$set': {'done': True}})
{u'_id': 665, u'done': False, u'count': 25}}

返回 None 如果没有与筛选器匹配的文档。

>>> db.test.find_one_and_update(
...    {'_exists': False}, {'$inc': {'count': 1}})

当过滤器匹配时,默认情况下 find_one_and_update() 返回应用更新之前文档的原始版本。返回更新的 更新插入 )相反,请使用 return_document 选择权。

>>> from pymongo import ReturnDocument
>>> db.example.find_one_and_update(
...     {'_id': 'userid'},
...     {'$inc': {'seq': 1}},
...     return_document=ReturnDocument.AFTER)
{u'_id': u'userid', u'seq': 1}

可以限制返回的字段 投影 选择权。

>>> db.example.find_one_and_update(
...     {'_id': 'userid'},
...     {'$inc': {'seq': 1}},
...     projection={'seq': True, '_id': False},
...     return_document=ReturnDocument.AFTER)
{u'seq': 2}

这个 更新插入 选项可用于创建不存在的文档。

>>> db.example.delete_many({}).deleted_count
1
>>> db.example.find_one_and_update(
...     {'_id': 'userid'},
...     {'$inc': {'seq': 1}},
...     projection={'seq': True, '_id': False},
...     upsert=True,
...     return_document=ReturnDocument.AFTER)
{u'seq': 1}

如果多个文档匹配 滤波器 ,A sort 可以应用。

>>> for doc in db.test.find({'done': True}):
...     print(doc)
...
{u'_id': 665, u'done': True, u'result': {u'count': 26}}
{u'_id': 701, u'done': True, u'result': {u'count': 17}}
>>> db.test.find_one_and_update(
...     {'done': True},
...     {'$set': {'final': True}},
...     sort=[('_id', pymongo.DESCENDING)])
{u'_id': 701, u'done': True, u'result': {u'count': 17}}
参数
  • filter :与要更新的文档匹配的查询。

  • update :要应用的更新操作。

  • projection (optional): A list of field names that should be returned in the result document or a mapping specifying the fields to include or exclude. If projection is a list "_id" will always be returned. Use a dict to exclude fields from the result (e.g. projection={'_id': False}).

  • sort (可选):指定查询排序顺序的(键、方向)对列表。如果多个文档与查询匹配,则对它们进行排序并更新第一个文档。

  • upsert (可选):何时 True ,如果没有与查询匹配的文档,则插入新文档。默认为 False .

  • return_document 如果 ReturnDocument.BEFORE (默认),返回更新前的原始文档。如果 ReturnDocument.AFTER ,返回更新或插入的文档。

  • array_filters (可选):筛选器列表,指定应应用更新的数组元素。此选项仅在MongoDB 3.6及更高版本上受支持。

  • hint (可选):用于支持由字符串名称指定的查询谓词,或使用与传递给的相同格式指定的查询谓词 create_index() (例如) [('field', ASCENDING)] ). 此选项仅在MongoDB 4.4及更高版本上受支持。

  • session (可选):a ClientSession .

  • **kwargs (可选):其他命令参数可以作为关键字参数传递(例如,maxTimeMS可用于最新的服务器版本)。

在 3.11 版更改: 增加了 hint 选择权。

在 3.9 版更改: 添加了接受管道作为 update .

在 3.6 版更改: 增加了 array_filterssession 选项。

在 3.4 版更改: 增加了 collation 选择权。

在 3.2 版更改: 尊重写关心。

警告

从pymongo3.2开始,这个命令使用 WriteConcern 其中 Collection 当连接到MongoDB时>=3.2。请注意,与使用默认写入关注点相比,在该命令中使用提升的写入关注点可能会慢一些。

3.0 新版功能.

count_documents(filter, session=None, **kwargs)

统计此集合中的文档数。

注解

有关集合中文档总数的快速计数,请参阅 estimated_document_count() .

这个 count_documents() 方法在事务中受支持。

所有可选参数都应作为关键字参数传递给此方法。有效选项包括:

  • skip (int):返回结果之前要跳过的匹配文档数。

  • limit (int):要计数的最大文档数。必须是正整数。如果未提供,则不施加限制。

  • maxTimeMS (int):允许此操作运行的最长时间,以毫秒为单位。

  • collation (可选):的实例 Collation . 此选项仅在MongoDB 3.4及更高版本上受支持。

  • hint (字符串或元组列表):要使用的索引。将索引名称指定为字符串,或将索引规范指定为元组列表(例如。 [(“a”,pymongo.升序),(“b”,pymongo.升序)] ). 此选项仅在MongoDB 3.6及更高版本上受支持。

这个 count_documents() 方法遵循 read_preference 其中 Collection .

注解

从迁移时 count()count_documents() 必须替换以下查询运算符:

算符

替换

$哪里

$expr

$附近

$geoWithin with $center

$近球体

$geoWithin with $centerSphere

$expr需要MongoDB 3.6+

参数
  • filter (必需):选择要在集合中计数的文档的查询文档。可以是空文档来计数所有文档。

  • session (可选):a ClientSession .

  • **kwargs (可选):请参阅上面的选项列表。

3.7 新版功能.

estimated_document_count(**kwargs)

使用集合元数据获取此集合中文档数的估计值。

这个 estimated_document_count() 方法是 not 在事务中支持。

所有可选参数都应作为关键字参数传递给此方法。有效选项包括:

  • maxTimeMS (int):允许此操作运行的最长时间,以毫秒为单位。

参数
  • **kwargs (可选):请参阅上面的选项列表。

3.7 新版功能.

distinct(key, filter=None, session=None, **kwargs)

获取的不同值列表 key 在这个集合的所有文档中。

Raises TypeError if key is not an instance of basestring (str in python 3).

所有可选的不同参数都应作为关键字参数传递给此方法。有效选项包括:

  • maxTimeMS (int):允许count命令运行的最长时间,以毫秒为单位。

  • collation (可选):的实例 Collation . 此选项仅在MongoDB 3.4及更高版本上受支持。

这个 distinct() 方法遵循 read_preference 其中 Collection .

参数
  • key :要获取其非重复值的字段的名称

  • filter (可选):指定要从中检索不同值的文档的查询文档。

  • session (可选):a ClientSession .

  • **kwargs (可选):请参阅上面的选项列表。

在 3.6 版更改: 补充 session 参数。

在 3.4 版更改: 支持 collation 选择权。

create_index(keys, session=None, **kwargs)

在此集合上创建索引。

Takes either a single key or a list of (key, direction) pairs. The key(s) must be an instance of basestring (str in python 3), and the direction(s) must be one of (ASCENDING, DESCENDING, GEO2D, GEOHAYSTACK, GEOSPHERE, HASHED, TEXT).

在键上创建单键升序索引 'mike' 我们只使用一个字符串参数:

>>> my_collection.create_index("mike")

对于上的复合索引 'mike' 下降和 'eliot' 升序我们需要使用元组列表:

>>> my_collection.create_index([("mike", pymongo.DESCENDING),
...                             ("eliot", pymongo.ASCENDING)])

所有可选的索引创建参数都应作为关键字参数传递给此方法。例如::

>>> my_collection.create_index([("mike", pymongo.DESCENDING)],
...                            background=True)

有效选项包括但不限于:

  • name :用于此索引的自定义名称-如果没有给定名称,则将生成一个名称。

  • unique 如果 True ,在索引上创建唯一性约束。

  • background 如果 True ,此索引应在后台创建。

  • sparse 如果 True ,从索引中省略缺少索引字段的任何文档。

  • bucketSize :用于geoHaystack索引。在给定经度和纬度一定范围内要组合在一起的文档数。

  • min :中键的最小值 GEO2D 索引。

  • max :中键的最大值 GEO2D 索引。

  • expireAfterSeconds :<int>用于创建过期(TTL)集合。MongoDB将在<int>秒后自动从此集合中删除文档。索引字段必须是UTC日期时间,否则数据不会过期。

  • partialFilterExpression :为部分索引指定筛选器的文档。需要MongoDB>=3.2。

  • collation (可选):的实例 Collation . 需要MongoDB>=3.4。

  • wildcardProjection: Allows users to include or exclude specific field paths from a wildcard index using the {"$**" : 1} key pattern. Requires MongoDB >= 4.2.

  • hidden 如果 True ,此索引将对查询计划器隐藏,并且不会作为查询计划选择的一部分进行计算。需要MongoDB>=4.4。

请参阅MongoDB文档,了解按服务器版本列出的受支持选项的完整列表。

警告

dropDups MongoDB 3.0或更新版本不支持。服务器将自动忽略该选项,如果检测到重复值,则使用该选项的唯一索引生成将失败。

注解

这个 write_concern 当使用MongoDB>=3.4时,将自动应用此集合的。

参数
  • keys :指定要创建的索引的单个键或(键、方向)对列表

  • session (可选):a ClientSession .

  • **kwargs (可选):任何附加的索引创建选项(请参阅上面的列表)都应作为关键字参数传递

在 3.11 版更改: 增加了 hidden 选择权。

在 3.6 版更改: 补充 session 参数。增加了对以kwargs为单位传递maxtimes的支持。

在 3.4 版更改: 当连接到MongoDB>=3.4时,将此集合的写入问题自动应用于此操作。支持 collation 选择权。

在 3.2 版更改: 添加了partialFilterExpression以支持部分索引。

在 3.0 版更改: 更名 key_or_listkeys . 移除了 cache_for 选择权。 create_index() 不再缓存索引名称。删除了对drop-dups和bucket-size别名的支持。

参见

MongoDB文档

indexes

create_indexes(indexes, session=None, **kwargs)

在此集合上创建一个或多个索引。

>>> from pymongo import IndexModel, ASCENDING, DESCENDING
>>> index1 = IndexModel([("hello", DESCENDING),
...                      ("world", ASCENDING)], name="hello_world")
>>> index2 = IndexModel([("goodbye", DESCENDING)])
>>> db.test.create_indexes([index1, index2])
["hello_world", "goodbye_-1"]
参数
  • indexes :列表 IndexModel 实例。

  • session (可选):a ClientSession .

  • **kwargs (可选):createIndexes命令的可选参数(如maxTimeMS)可以作为关键字参数传递。

注解

create_indexes uses the createIndexes MongoDB中引入的命令 2.6 不能与早期版本一起使用。

注解

这个 write_concern 当使用MongoDB>=3.4时,将自动应用此集合的。

在 3.6 版更改: 补充 session 参数。添加了对任意关键字参数的支持。

在 3.4 版更改: 当连接到MongoDB>=3.4时,将此集合的写入问题自动应用于此操作。

3.0 新版功能.

drop_index(index_or_name, session=None, **kwargs)

删除此集合上的指定索引。

可用于不存在的集合或没有索引的集合。在出现错误时引发OperationFailure(例如,尝试删除不存在的索引)。 index_or_name 可以是索引名称(由返回 create_index ),或索引说明符(传递给 create_index ). 索引说明符应该是(键,方向)对的列表。如果索引不是(str,unicode,list)的实例,则引发TypeError。

警告

如果在创建索引时使用了自定义名称(通过传递 name 参数到 create_index()ensure_index() )索引 must 被点名删除。

参数
  • index_or_name :要删除的索引(或索引的名称)

  • session (可选):a ClientSession .

  • **kwargs (可选):createIndexes命令的可选参数(如maxTimeMS)可以作为关键字参数传递。

注解

这个 write_concern 当使用MongoDB>=3.4时,将自动应用此集合的。

在 3.6 版更改: 补充 session 参数。添加了对任意关键字参数的支持。

在 3.4 版更改: 当连接到MongoDB>=3.4时,将此集合的写入问题自动应用于此操作。

drop_indexes(session=None, **kwargs)

删除此集合上的所有索引。

可用于不存在的集合或没有索引的集合。对错误引发OperationFailure。

参数
  • session (可选):a ClientSession .

  • **kwargs (可选):createIndexes命令的可选参数(如maxTimeMS)可以作为关键字参数传递。

注解

这个 write_concern 当使用MongoDB>=3.4时,将自动应用此集合的。

在 3.6 版更改: 补充 session 参数。添加了对任意关键字参数的支持。

在 3.4 版更改: 当连接到MongoDB>=3.4时,将此集合的写入问题自动应用于此操作。

reindex(session=None, **kwargs)

重新生成此集合上的所有索引。

DEPRECATED - reindex() 方法已弃用,将在PyMongo 4.0中删除。使用 command() 运行 reIndex 直接命令:

db.command({"reIndex": "<collection_name>"})

注解

从MongoDB 4.6开始 reIndex 命令只能在连接到独立mongod时运行。

参数
  • session (可选):a ClientSession .

  • **kwargs (可选):reIndex命令的可选参数(如maxTimeMS)可以作为关键字参数传递。

警告

重新编制索引会阻止所有其他操作(索引是在前台构建的),对于大型集合来说速度会很慢。

在 3.11 版更改: 已弃用。

在 3.6 版更改: 补充 session 参数。添加了对任意关键字参数的支持。

在 3.5 版更改: 我们不再将此集合的写入关注点应用于此操作。mongodb3.4默默地忽略了写操作。如果包含写入问题,MongoDB 3.6+将返回一个错误。

在 3.4 版更改: 当连接到MongoDB>=3.4时,将此集合的写入问题自动应用于此操作。

list_indexes(session=None)

在该集合的索引文档上获取一个光标。

>>> for index in db.test.list_indexes():
...     print(index)
...
SON([('v', 2), ('key', SON([('_id', 1)])), ('name', '_id_')])
参数
返回

的实例 CommandCursor .

在 3.6 版更改: 补充 session 参数。

3.0 新版功能.

index_information(session=None)

获取有关此集合索引的信息。

返回一个字典,其中键是索引名(由create_index()返回),值是包含每个索引信息的字典。字典保证至少包含一个密钥, "key" 它是指定索引的(键、方向)对的列表(传递给create_index())。它还将包含关于索引的任何其他元数据,除了 "ns""name" 钥匙,已经清洗过了。示例输出可能如下所示:

>>> db.test.create_index("x", unique=True)
u'x_1'
>>> db.test.index_information()
{u'_id_': {u'key': [(u'_id', 1)]},
 u'x_1': {u'unique': True, u'key': [(u'x', 1)]}}
参数

在 3.6 版更改: 补充 session 参数。

drop(session=None)

Alias drop_collection() .

参数

以下两个调用等效:

>>> db.foo.drop()
>>> db.drop_collection("foo")

在 3.7 版更改: drop() 现在尊重这一点 Collectionwrite_concern .

在 3.6 版更改: 补充 session 参数。

rename(new_name, session=None, **kwargs)

重命名此集合。

If operating in auth mode, client must be authorized as an admin to perform this operation. Raises TypeError if new_name is not an instance of basestring (str in python 3). Raises InvalidName if new_name is not a valid collection name.

参数
  • new_name :此集合的新名称

  • session (可选):a ClientSession .

  • **kwargs (可选):rename命令的附加参数可以作为关键字参数传递给这个helper方法(即。 dropTarget=True

注解

这个 write_concern 当使用MongoDB>=3.4时,将自动应用此集合的。

在 3.6 版更改: 补充 session 参数。

在 3.4 版更改: 当连接到MongoDB>=3.4时,将此集合的写入问题自动应用于此操作。

options(session=None)

获取此集合的选项集。

返回选项及其值的字典-请参阅 create_collection() 有关可能选项的更多信息。如果尚未创建集合,则返回空字典。

参数

在 3.6 版更改: 补充 session 参数。

map_reduce(map, reduce, out, full_response=False, session=None, **kwargs)

对此集合执行映射/减少操作。

如果 full_response is False (default) returns a Collection instance containing the results of the operation. Otherwise, returns the full response from the server to the map reduce command .

参数
  • map :map函数(作为JavaScript字符串)

  • reduce :reduce函数(作为JavaScript字符串)

  • out: output collection name or out object (dict). See the map reduce command 可用选项的文档。注: out 选项对顺序敏感。 SON 可用于指定多个选项。e、 g.儿子( [('replace', <collection name>), ('db', <database name>)] )

  • full_response (可选):如果 True ,返回对此命令的完整响应-否则只返回结果集合

  • session (可选):a ClientSession .

  • **kwargs (optional): additional arguments to the map reduce command 可以作为关键字参数传递给此helper方法,例如:

    >>> db.test.map_reduce(map, reduce, "myresults", limit=2)
    

注解

这个 map_reduce() 方法做 not 服从 read_preference 其中 Collection . 要在辅助服务器上运行mapReduce,请使用 inline_map_reduce() 方法。

注解

这个 write_concern 当使用MongoDB>=3.4时,此集合的自动应用于此操作(如果输出不是内联的)。

在 3.6 版更改: 补充 session 参数。

在 3.4 版更改: 当连接到MongoDB>=3.4时,将此集合的写入问题自动应用于此操作。

参见

聚合示例

在 3.4 版更改: 增加了 collation 选择权。

在 2.2 版更改: 删除了不推荐使用的参数:mergeu output和reduceu output

参见

MongoDB文档

mapreduce

inline_map_reduce(map, reduce, full_response=False, session=None, **kwargs)

对此集合执行内联映射/减少操作。

在RAM中的服务器上执行map/reduce操作。未创建结果集合。结果集作为文档列表返回。

如果 full_response is False (default) returns the result documents in a list. Otherwise, returns the full response from the server to the map reduce command .

这个 inline_map_reduce() 方法遵循 read_preference 其中 Collection .

参数
  • map :map函数(作为JavaScript字符串)

  • reduce :reduce函数(作为JavaScript字符串)

  • full_response (可选):如果 True ,返回对此命令的完整响应-否则只返回结果集合

  • session (可选):a ClientSession .

  • **kwargs (optional): additional arguments to the map reduce command 可以作为关键字参数传递给此helper方法,例如:

    >>> db.test.inline_map_reduce(map, reduce, limit=2)
    

在 3.6 版更改: 补充 session 参数。

在 3.4 版更改: 增加了 collation 选择权。

parallel_scan(num_cursors, session=None, **kwargs)

DEPRECATED :并行扫描整个集合。

返回最多 num_cursors 可以并发迭代的游标。只要在扫描期间不修改集合,则每个文档在其中一个游标结果集中显示一次。

例如,使用线程安全处理集合中的每个文档 process_document() 功能:

>>> def process_cursor(cursor):
...     for document in cursor:
...     # Some thread-safe processing function:
...     process_document(document)
>>>
>>> # Get up to 4 cursors.
...
>>> cursors = collection.parallel_scan(4)
>>> threads = [
...     threading.Thread(target=process_cursor, args=(cursor,))
...     for cursor in cursors]
>>>
>>> for thread in threads:
...     thread.start()
>>>
>>> for thread in threads:
...     thread.join()
>>>
>>> # All documents have now been processed.

这个 parallel_scan() 方法遵循 read_preference 其中 Collection .

参数
  • num_cursors :要返回的游标数

  • session (可选):a ClientSession .

  • **kwargs :parallelCollectionScan命令的其他选项可以作为关键字参数传递。

注解

需要服务器版本 >= 2.5.5 .

在 3.7 版更改: 已弃用。

在 3.6 版更改: 补充 session 参数。

在 3.4 版更改: 添加了对任意关键字参数的回支持。mongodb3.4在parallelCollectionScan命令中添加了对maxtimes的支持。

在 3.0 版更改: 删除了对任意关键字参数的支持,因为parallelCollectionScan命令没有可选参数。

initialize_unordered_bulk_op(bypass_document_validation=False)

DEPRECATED -初始化一批无序的写入操作。

操作将在服务器上以任意顺序执行,可能是并行的。将尝试所有操作。

参数
  • bypass_document_validation :(可选)如果 True ,允许写入选择退出文档级验证。默认为 False .

返回A BulkOperationBuilder 实例。

无序大容量写入操作 举个例子。

注解

bypass_document_validation 需要服务器版本 >= 3.2

在 3.5 版更改: 不赞成的使用 bulk_write() 相反。

在 3.2 版更改: 增加了旁路文件验证支持

2.7 新版功能.

initialize_ordered_bulk_op(bypass_document_validation=False)

DEPRECATED -初始化一批有序的写入操作。

操作将按提供的顺序在服务器上串行执行。如果发生错误,所有剩余操作都将中止。

参数
  • bypass_document_validation :(可选)如果 True ,允许写入选择退出文档级验证。默认为 False .

返回A BulkOperationBuilder 实例。

有序的大容量写入操作 举个例子。

注解

bypass_document_validation 需要服务器版本 >= 3.2

在 3.5 版更改: 不赞成的使用 bulk_write() 相反。

在 3.2 版更改: 增加了旁路文件验证支持

2.7 新版功能.

group(key, condition, initial, reduce, finalize=None, **kwargs)

执行类似于SQL的查询 分组依据 操作。

DEPRECATED -在MongoDB 3.4中不推荐使用group命令。这个 group() 方法已弃用,将在PyMongo 4.0中删除。使用 aggregate()$group 舞台或 map_reduce() 相反。

在 3.5 版更改: 已弃用组方法。

在 3.4 版更改: 增加了 collation 选择权。

在 2.2 版更改: 删除了不推荐使用的参数:command

count(filter=None, session=None, **kwargs)

DEPRECATED -获取此集合中的文档数。

这个 count() 方法已弃用,并且 not 在事务中支持。请使用 count_documents()estimated_document_count() 相反。

所有可选的count参数都应作为关键字参数传递给此方法。有效选项包括:

  • skip (int):返回结果之前要跳过的匹配文档数。

  • limit (int):要计数的最大文档数。限制为0(默认值)相当于不设置限制。

  • maxTimeMS (int):允许count命令运行的最长时间,以毫秒为单位。

  • collation (可选):的实例 Collation . 此选项仅在MongoDB 3.4及更高版本上受支持。

  • hint (字符串或元组列表):要使用的索引。将索引名称指定为字符串,或将索引规范指定为元组列表(例如。 [(“a”,pymongo.升序),(“b”,pymongo.升序)] )

这个 count() 方法遵循 read_preference 其中 Collection .

注解

从迁移时 count()count_documents() 必须替换以下查询运算符:

算符

替换

$哪里

$expr

$附近

$geoWithin with $center

$近球体

$geoWithin with $centerSphere

$expr需要MongoDB 3.6+

参数
  • filter (可选):选择要在集合中计数的文档的查询文档。

  • session (可选):a ClientSession .

  • **kwargs (可选):请参阅上面的选项列表。

在 3.7 版更改: 已弃用。

在 3.6 版更改: 补充 session 参数。

在 3.4 版更改: 支持 collation 选择权。

insert(doc_or_docs, manipulate=True, check_keys=True, continue_on_error=False, **kwargs)

将文档插入此集合。

DEPRECATED -使用 insert_one()insert_many() 相反。

在 3.0 版更改: 移除 safe 参数。通过 w=0 对于未确认的写入操作。

save(to_save, manipulate=True, check_keys=True, **kwargs)

在此集合中保存文档。

DEPRECATED -使用 insert_one()replace_one() 相反。

在 3.0 版更改: 移除 safe 参数。通过 w=0 对于未确认的写入操作。

update(spec, document, upsert=False, manipulate=False, multi=False, check_keys=True, **kwargs)

更新此集合中的文档。

DEPRECATED -使用 replace_one()update_one()update_many() 相反。

在 3.0 版更改: 移除 safe 参数。通过 w=0 对于未确认的写入操作。

remove(spec_or_id=None, multi=True, **kwargs)

从此集合中删除文档。

DEPRECATED -使用 delete_one()delete_many() 相反。

在 3.0 版更改: 移除 safe 参数。通过 w=0 对于未确认的写入操作。

find_and_modify(query={}, update=None, upsert=False, sort=None, full_response=False, manipulate=False, **kwargs)

更新并返回一个对象。

DEPRECATED -使用 find_one_and_delete()find_one_and_replace()find_one_and_update() 相反。

ensure_index(key_or_list, cache_for=300, **kwargs)

DEPRECATED -确保此集合上存在索引。

在 3.0 版更改: DEPRECATED