collection - коллекции¶
-
ASCENDING = 1
Сортировка по возрастанию
-
DESCENDING = -1
Сортировка по убыванию
-
GEO2D = '2d'
2d индекс
-
GEOHAYSTACK = 'geoHaystack'
geoHaystack индекс
-
GEOSPHERE = '2dsphere'
2dsphere индекс
-
HASHED = 'hashed'
hashed индекс
-
TEXT = 'text'
text индекс
ReturnDocument¶
- class
pymongo.collection.
ReturnDocument
¶ Enum используемый в
Collection.find_one_and_replace()
иCollection.find_one_and_update()
-
AFTER
¶ Вернуть обновленный/замененый документ
-
BEFORE
¶ Вернуть найденный документ перед обновлением/заменой
-
Collection¶
- class
pymongo.collection.
Collection
(**kwargs)¶ Коллекция
database - БД для коллекции
name - название коллекции
create - опционно, форсировать создание коллекции
codec_options - опционально,
bson.codec_options.CodecOptions
. Если None, то значение берется из БДread_preference - опционально, настройки чтения. Если None, то значение берется из БД
write_concern - опционально,
py,ongo.write_concern.WriteConcern
. Если None, то значение берется из БД
>>> import pymongo >>> client = pymongo.MongoClient() >>> db = client.my_db >>> users = db.users
-
codec_options
¶ bson.codec_options.CodecOptions
, доступный только для чтения
-
database
¶ pymongo.databaseDatabase
, ссылка на БД коллекции
-
full_name
¶ Возвращает строку, полное имя коллекции: db_name.collection_name
-
name
¶ Название коллекции
-
read_preference
¶ Настройки чтения, только для чтения
-
write_concern
¶ pymongo.write_concern.WriteConcern
, доступные только для чтения, настройки записи
-
aggregate
(**kwargs)¶ Агрегация, возвращает
pymongo.command_cursor.CommandCursor
pipeline - список этапов агрегации
allowDiskUse=False - включение записи временных файлов
maxTimeMS - int, время на выполнение операции
batchSize - int, количество возвращаемых документо
useCursor - bool, запросы в БД идут используя курсор
Данный метод использует настройки read_preference коллекции.
Warning
При обновлении кластеров до 2.6 useCursor должен быть False.
Note
Использование $out в pipeline требует read preference = PRIMARY
Note
Данный метод не поддерживает опцию explain. Необходимо использовать command().
>>> from bson.son import SON >>> result = db.things.insert_many([{"x": 1, "tags": ["dog", "cat"]}, ... {"x": 2, "tags": ["cat"]}, ... {"x": 2, "tags": ["mouse", "cat", "dog"]}, ... {"x": 3, "tags": []}]) >>> pipeline = [ ... {"$unwind": "$tags"}, ... {"$group": {"_id": "$tags", "count": {"$sum": 1}}}, ... {"$sort": SON([("count", -1), ("_id", -1)])} ... ] >>> list(db.things.aggregate(pipeline)) [{u'count': 3, u'_id': u'cat'}, {u'count': 2, u'_id': u'dog'}, {u'count': 1, u'_id': u'mouse'}]
-
bulk_write
(requests, ordered=True)¶ Возвращает
pymongo.results.BulkWriteResult
, результат сохранения списка операцииrequests - список задании
ordered
>>> 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')}
-
delete_one
(filter)¶ Удаляет один документ из коллкеции, удовлетвоярющий фильтру
>>> db.test.count({'x': 1}) 3 >>> result = db.test.delete_one({'x': 1}) >>> result.deleted_count 1 >>> db.test.count({'x': 1}) 2
-
delete_many
(filter)¶ Удаляет документы из коллекции, удовлетворяющие фильтру
>>> db.test.count({'x': 1}) 3 >>> result = db.test.delete_many({'x': 1}) >>> result.deleted_count 3 >>> db.test.count({'x': 1}) 0
-
find
(**kwargs)¶ Поиск документов в коллекции
>>> db.test.find({"hello": "world"})
filter - опционально, фильтр для поиска
projection - опционно, список полей, которые нужны в результате запроса. projection={‘_id’: False})
skip - the number of documents to omit (from the start of the result set) when returning the results
limit - опционально, количесвто документов в результате
no_cursor_timeout=False - опционально, булево, выключить таймаут для курсора. Если True то курсор постоянно будет соединен с БД
cursor_type - опционально, тип курсора, одно из значение
pymongo.cursor.CursorType
sort - опционально, список словарей для сортировки
allow_partial_results - опционально, булево, порционное получение данных
oplog_replay - опционно, (optional): If True, set the oplogReplay query flag.
modifiers - опционно, словарь модификатор фильтра MongoDB
>>> db.test.find(modifiers={"$maxTimeMS": 500})
batch_size - опционно, количество документов в порции при порционном поиске
-
find_one
(**kwargs)¶ Поиск одного документа в коллекции
Принимает те же аргументы что и
find()
max_time_ms - опционно, a value for max_time_ms may be specified as part of **kwargs
>>> find_one(max_time_ms=100) >>> from bson.objectid import ObjectId >>> users.find_one({'_id': ObjectId(user['id'])})
-
find_one_and_delete
(**kwargs)¶ Возвращает найденный документ, удалив его из коллекции
filter - фильтр для поиска
projection - опционно, список полей, которые должны быть в рузельтате
sort - опционно, фильтр для сортировки
>>> db.test.count({'x': 1}) 2 >>> db.test.find_one_and_delete({'x': 1}) {u'x': 1, u'_id': ObjectId('54f4e12bfba5220aa4d6dee8')} >>> db.test.count({'x': 1}) 1
>>> 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}
-
find_one_and_replace
(**kwargs)¶ Находит документ и заменяет его. Возвращает найденный или замененный документ
filter - фильтр для поиска
replacement - документ для замены
projection - опционно, список полей которые должны быть в результате
sort - сортировка
upsert=False - опционно, булево, создать документ если не найден
return_document - значение
pymongo.collection.ReturmDocument
>>> 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}
-
find_one_and_update
(**kwargs)¶ Находит документ и обновляет его. Возвращает найденный или обновленный документ
filter - фильтр для поиска
update - операция обновления
projection - опционно, параметры документа, которые должны быть в результате
sort - опционно, операция сортировка
upsert - опционно, булево, создать документ если он не найден
return_document - значение
pymongo.collection.ReturnDocument
. Вернуть найденный документ или обновленный
>>> db.test.find_one_and_update( ... {'_id': 665}, {'$inc': {'count': 1}, '$set': {'done': True}}) {u'_id': 665, u'done': False, u'count': 25}}
>>> 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}
>>> 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}}
-
count
(**kwargs)¶ Возвращается количество документов в коллекции
filter - опционно, фильтр опеределнных документов
hint - (string or list of tuples): The index to use. Specify either the index name as a string or the index specification as a list of tuples (e.g. [(‘a’, pymongo.ASCENDING), (‘b’, pymongo.ASCENDING)]).
limit - максимальное количество документов в фильтре
skip - (int): The number of matching documents to skip before returning results.
maxTimeMS - (int): The maximum amount of time to allow the count command to run, in milliseconds.
-
create_index
(**kwargs)¶ Создание индекса для коллекции
keys - ключ или списко ключей, для которых надо создать индексы
name - имя для индекса
unique - if True creates a uniqueness constraint on the index.
background - булево, создать индекс в фоне
sparse - if True, omit from the index any documents that lack the indexed field.
bucketSize - for use with geoHaystack indexes. Number of documents to group together within a certain proximity to a given longitude and latitude.
min - minimum value for keys in a GEO2D index.
max - maximum value for keys in a GEO2D index.
expireAfterSeconds - <int> Used to create an expiring (TTL) collection. MongoDB will automatically delete documents from this collection after <int> seconds. The indexed field must be a UTC datetime or the data will not expire.
>>> my_collection.create_index("mike") >>> my_collection.create_index( ... [("mike", pymongo.DESCENDING), ... ("eliot", pymongo.ASCENDING)])
>>> my_collection.create_index([("mike", pymongo.DESCENDING)], ... background=True)
-
create_indexes
(indexes)¶ Создать один или несколько индексов
indexes - список :py:class::pymongo.IndexModel
>>> 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"]
-
distinct
(**kwargs)¶ Возвращает уникальные записи
key - поле, по которому считается уникальность
filter - опционно, фильтр для получения данных
maxTimeMS - (int): The maximum amount of time to allow the count command to run, in milliseconds.
-
drop
()¶ Удаляет коллекцию из БД
-
drop_index
(index_or_name)¶ Удаляет индексы из коллекции
index_or_name - индекс для удаления
-
drop_indexes
()¶ Удаление всех индексов
-
group
(**kwargs)¶ Возвращает список группированных документов
key - поле или список полей для группировки
condition - фильтр данных для группировки
initial - начальные данные для группировки
reduce - JS строка-функция агрегации
finalize - функция вызываемая для каждого объекта на выходе
>>> result = db.things.insert_many([{"x": 1, "tags": ["dog", "cat"]}, ... {"x": 2, "tags": ["cat"]}, ... {"x": 2, "tags": ["mouse", "cat", "dog"]}, ... {"x": 3, "tags": []}]) >>> from bson.code import Code >>> reducer = Code(""" ... function(obj, prev){ ... prev.count++; ... } ... """) ... >>> results = db.things.group(key={"x":1}, condition={}, initial={"count": 0}, reduce=reducer) >>> for doc in results: ... print doc {u'count': 1.0, u'x': 1.0} {u'count': 2.0, u'x': 2.0} {u'count': 1.0, u'x': 3.0}
-
index_information
()¶ Возвращает информацию об индексах коллекции
>>> db.test.ensure_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)]}}
-
initialize_ordered_bulk_op
()¶ Возвращает
pymongo.bulk.BulkOperationBuilder
, для отложенных выполнений операции с коллекцией. Операции будут проводиться по порядку>>> from pprint import pprint >>> >>> bulk = db.test.initialize_ordered_bulk_op() >>> # Remove all documents from the previous example. ... >>> bulk.find({}).remove() >>> bulk.insert({'_id': 1}) >>> bulk.insert({'_id': 2}) >>> bulk.insert({'_id': 3}) >>> bulk.find({'_id': 1}).update({'$set': {'foo': 'bar'}}) >>> bulk.find({'_id': 4}).upsert().update({'$inc': {'j': 1}}) >>> bulk.find({'j': 1}).replace_one({'j': 2}) >>> result = bulk.execute() >>> pprint(result) {'nInserted': 3, 'nMatched': 2, 'nModified': 2, 'nRemoved': 10000, 'nUpserted': 1, 'upserted': [{u'_id': 4, u'index': 5}], 'writeConcernErrors': [], 'writeErrors': []} >>>
-
initialize_unordered_bulk_op
()¶ Возвращает
pymongo.bulk.BulkOperationBuilder
, для отложенных выполнений операции с коллекией. Операции будут проводиться не по порядку>>> bulk = db.test.initialize_unordered_bulk_op() >>> bulk.insert({'_id': 1}) >>> bulk.find({'_id': 2}).remove_one() >>> bulk.insert({'_id': 3}) >>> bulk.find({'_id': 4}).replace_one({'i': 1}) >>> try: ... bulk.execute() ... except BulkWriteError as bwe: ... pprint(bwe.details) ... {'nInserted': 0, 'nMatched': 1, 'nModified': 1, 'nRemoved': 1, 'nUpserted': 0, 'upserted': [], 'writeConcernErrors': [], 'writeErrors': [{u'code': 11000, u'errmsg': u'insertDocument :: caused by :: 11000 E11000 duplicate key error index: bulk_example.test.$_id_ dup key: { : 1 }', u'index': 0, u'op': {'_id': 1}}, {u'code': 11000, u'errmsg': u'insertDocument :: caused by :: 11000 E11000 duplicate key error index: bulk_example.test.$_id_ dup key: { : 3 }', u'index': 2, u'op': {'_id': 3}}]}
-
inline_map_reduce
(**kwargs)¶ Выполняет внутренние функции map/reduce
Perform the map/reduce operation on the server in RAM. A result collection is not created. The result set is returned as a list of documents.
If 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.
map - строковое представление JS map функции
reduce - строковое представление JS reduce функции
out - имя результирующего объекта
full_response - опционно, if True, return full response to this command - otherwise just return the result collection
>>> db.test.inline_map_reduce(map, reduce, limit=2)
-
insert_one
(document)¶ Возвращает
pymongo.results.InsertOneResult
, результат добавления одного документа в коллекцию>>> db.test.count({'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')}
-
insert_many
(documents, ordered=True)¶ Возвращает
pymongo.results.InsertManyResult
, результат множественного добавления документов в коллекциюdocuments - список документов
>>> db.test.count() 0 >>> result = db.test.insert_many([{'x': i} for i in range(2)]) >>> result.inserted_ids [ObjectId('54f113fffba522406c9cc20e'), ObjectId('54f113fffba522406c9cc20f')] >>> db.test.count() 2
-
list_indexes
()¶ Возврашает список индексов коллекции
>>> for index in db.test.list_indexes(): ... print(index) ... SON([(u'v', 1), (u'key', SON([(u'_id', 1)])), (u'name', u'_id_'), (u'ns', u'test.test')])
-
map_reduce
(**kwargs)¶ Применяет map/reduce функции для коллекции
map - строковое представление JS map функции
reduce - строковое представление JS reduce функции
out - имя результирующего объекта
>>> result = db.things.insert_many([{"x": 1, "tags": ["dog", "cat"]}, ... {"x": 2, "tags": ["cat"]}, ... {"x": 2, "tags": ["mouse", "cat", "dog"]}, ... {"x": 3, "tags": []}]) >>> from bson.code import Code >>> mapper = Code(""" ... function () { ... this.tags.forEach(function(z) { ... emit(z, 1); ... }); ... } ... """) >>> reducer = Code(""" ... function (key, values) { ... var total = 0; ... for (var i = 0; i < values.length; i++) { ... total += values[i]; ... } ... return total; ... } ... """)
>>> result = db.things.map_reduce(mapper, reducer, "myresults") >>> for doc in result.find(): ... print doc ... {u'_id': u'cat', u'value': 3.0} {u'_id': u'dog', u'value': 2.0} {u'_id': u'mouse', u'value': 1.0}
>>> # Получим полную информацию: >>> db.things.map_reduce(mapper, reducer, "myresults", full_response=True) {u'counts': {u'input': 4, u'reduce': 2, u'emit': 6, u'output': 3}, u'timeMillis': ..., u'ok': ..., u'result': u'...'}
>>> # Ограничение выборки: >>> result = db.things.map_reduce(mapper, reducer, "myresults", query={"x": {"$lt": 2}}) >>> for doc in result.find(): ... print doc ... {u'_id': u'cat', u'value': 1.0} {u'_id': u'dog', u'value': 1.0}
>>> from bson.son import SON >>> db.things.map_reduce(mapper, reducer, out=SON([("replace", "results"), ("db", "outdb")]), full_response=True) {u'counts': {u'input': 4, u'reduce': 2, u'emit': 6, u'output': 3}, u'timeMillis': ..., u'ok': ..., u'result': {u'db': ..., u'collection': ...}}
-
options
()¶ Возвращает свойства коллекции
-
reindex
()¶ Перестраивает все индексы в коллекции
Warning
Данный метод блокирует все операции
-
parallel_scan
(num_cursors)¶ Возвращает курсоры для паралельного сканирования коллекции
num_cursors - количесвто возвращаемых курсоров
>>> 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.
-
rename
(**kwargs)¶ Переименовывает коллекцию
new_name -новое название
-
replace_one
(filter, replacement, upsert=False)¶ Возвращает
pymongo.results.UpdateResult
, результат замены найденного документаfilter - документ, который заменяем
replacement - новый документ
upsert - опционно, булево, если искомого документа не существует, то создать новый
>>> 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')}
-
update_one
(filter, update, upsert=False)¶ Возвращает
pymongo.results.UpdateResult
, результат обновления найденного документаfilter - документ, который обновляем
update - изменение
upsert - опционно, булево, если искомого документа не существует, то создать новый
>>> 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}
-
update_many
(filter, update, upsert=False)¶ Возвращает
pymongo.results.UpdateResult
, результат обновления найденных документовfilter - документ, который обновляем
update - изменение
upsert - опционно, булево, если искомого документа не существует, то создать новый
>>> 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}
-
with_options
(codec_options=None, read_preference=None, write_concern=None)¶ Возвращает
pymongo.collection.Collection
, копию исходной, с измененными параметрамиcodec_options - опционно,
bson.codec_options.CodecOptions
.read_preference - опционно, настройки чтения
write_concern - опционно,
pymongo.write_concern.WriteConcern
, настройки записи
>>> from pymongo import ReadPreference >>> coll1.read_preference Primary() >>> coll2 = coll1.with_options(read_preference=ReadPreference.SECONDARY) >>> coll1.read_preference Primary() >>> coll2.read_preference Secondary(tag_sets=None)