2

Я нашел этот ответ - Answer linkСохранить подмножество MongoDB (3.0) коллекции в другую коллекцию в Python

db.full_set.aggregate([ { $match: { date: "20120105" } }, { $out: "subset" } ]); 

Я хочу сделать то же самое, но с первых 15000 документов в коллекции, я не мог найти, как применить ограничение на такой запрос (я попытался с помощью $limit : 15000, но он не признает $ предела)

также, когда я попробовал -

db.subset.insert(db.full_set.find({}).limit(15000).toArray()) 

нет фунца ион toArray() для выходного типа cursor.

Направьте меня, как я могу это выполнить?

+1

ли вы попробовать 'db.full_set.aggregate ([{$ матч: {дата: "20120105"}}, {$ limit: 15000}, {$ out: "subset"}]); '? – chridam

+0

Я запускаю это в ноутбуке Jupyter, он говорит, что «$» не является допустимым синтаксисом. – Darpan

ответ

0

Ну
в питоне, это то, как работают вещи - $limit должны быть обернуты в "",
и вам необходимо создать трубопровод для выполнения его как команда.

В моем коде -

pipeline = [{ '$limit': 15000 },{'$out': "destination_collection"}] 
    db.command('aggregate', "source_collection", pipeline=pipeline) 

Вам нужно обернуть все в двойные кавычки, в том числе источника и сбора назначения. И в db.command дб является объектом базы данных (т.е. dbclient.database_name)

В соответствии с этим ответом -

Он работает примерно в 100 раз быстрее, чем Foreach по крайней мере в моем случае. Это связано с тем, что весь конвейер агрегации работает в процессе mongod, тогда как решение на основе find() и insert() должно отправлять все документы с сервера клиенту, а затем обратно. Это имеет ограничение производительности, даже если сервер и клиент находятся на одной машине.

Тот, который действительно помог мне понять этот ответ из - Reference 1
И official documentation