Есть ли лучший способ экспортировать запрос mongodb в новую коллекцию? - PullRequest
9 голосов
/ 19 июня 2011

Что я хочу: У меня есть основная коллекция продуктов, затем я хочу отфильтровать их и поместить в отдельную коллекцию.

db.masterproducts.find ({категория: "акваланг")). CopyTo (db.newcollection)

Конечно, я понимаю, что copyTo не существует.

Я думал, что смогу сделать это с помощью MapReduce, поскольку результаты создаются в новой коллекции с использованием нового параметра 'out' в v1.8; однако эта новая коллекция не является подмножеством моей оригинальной коллекции. Или это может быть, если я правильно использую MapReduce?

Чтобы обойти это, я сейчас делаю это: Шаг 1: / usr / local / mongodb / bin / mongodump - база данных --db --collection masterproducts -q '{категория: "акваланг"}'

Шаг 2: / usr / local / mongodb / bin / mongorestore -d база данных -c newcollection --drop packages.bson

Мой двухшаговый метод кажется довольно неэффективным!

Любая помощь с благодарностью.

Спасибо

Bob

Ответы [ 4 ]

12 голосов
/ 28 ноября 2012

Вы можете перебрать результаты запроса и сохранить каждый элемент следующим образом:

db.oldCollection.find(query).forEach(function(x){db.newCollection.save(x);})
4 голосов
/ 19 июня 2011
  1. Вы можете создать небольшой javascript на стороне сервера (например, этот , просто добавьте необходимую фильтрацию) и выполнить его, используя eval
  2. Вы можете использоватьВыполните дамп / восстановление, как описано выше
  3. Команда «Копировать коллекцию» скоро будет в mongodb (будет сделано в порядке голосования)!См. функция jira.
0 голосов
/ 18 февраля 2014

есть также метод toArray (), который можно использовать:

//create new collection 
db.creatCollection("resultCollection")

// now query for type="foo" and insert the results into new collection
db.resultCollection.insert( (db.orginialCollection.find({type:'foo'}).toArray())
0 голосов
/ 19 июня 2011

Вы должны быть в состоянии создать подмножество с mapreduce (используя 'out').Проблема в том, что mapreduce имеет специальный формат вывода, поэтому ваши документы будут преобразованы (есть билет JIRA для добавления поддержки другого формата, но я не могу найти его в данный момент).Это также будет очень неэффективно: /

Копирование курсора в коллекцию имеет большой смысл, я предлагаю создать заявку на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...