Если ваш запрос использует оператор агрегации, тогда решение является образцом с использованием $ out.
Я создал образец коллекции с именем «тестер», который содержит следующие записи.
{ "_id" : ObjectId("4fb36bfd3d1c88bfa15103b1"), "name" : "bob", "value" : 5, "state" : "b"}
{ "_id" : ObjectId("4fb36c033d1c88bfa15103b2"), "name" : "bob", "value" : 3, "state" : "a"}
{ "_id" : ObjectId("4fb36c063d1c88bfa15103b3"), "name" : "bob", "value" : 7, "state" : "a"}
{ "_id" : ObjectId("4fb36c0c3d1c88bfa1a03b4"), "name" : "john", "value" : 2, "state" : "a"}
{ "_id" : ObjectId("4fb36c103d1c88bfa5103b5"), "name" : "john", "value" : 4, "state" : "b"}
{ "_id" : ObjectId("4fb36c143d1c88bfa15103b"), "name" : "john", "value" : 8, "state" : "b"}
{ "_id" : ObjectId("4fb36c163d1c88bfa15103a"), "name" : "john", "value" : 6, "state" : "a"}
Теперь с помощью совокупного оператора я выполняю группу, а затем сохранить результат в новую коллекцию с помощью этого волшебного оператора «$ из».
db.tester.aggregate([{$group:{
_id:{name:"$name",state:"$state"},
min:{$min:"$value"},
max:{$max:"$value"},
} },
{$out:"tester_max_min"}
])
Что в основном запрос пытается сделать это, группа по имени & состояния и найти минимальное и максимальное значения для каждой отдельной группы, а затем сохранить результат в новой коллекции под названием «tester_max_min»
db.tester_max_min.find();
новая коллекция формируется будет иметь следующие документы в нем:
{ "_id" : { "name" : "john", "state" : "b" }, "min" : 4, "max" : 8 }
{ "_id" : { "name" : "john", "state" : "a" }, "min" : 2, "max" : 6 }
{ "_id" : { "name" : "bob", "state" : "a" }, "min" : 3, "max" : 7 }
{ "_id" : { "name" : "bob", "state" : "b" }, "min" : 5, "max" : 5 }
мне еще нужно изучить, насколько полезным может $ за это, но работает как шарм для любого оператора агрегатора.
Ну, но я не хочу использовать '.forEach' вообще. Было бы неплохо, если бы я мог сделать db.result.save (db.docs.find (...)), но он говорит: «не может сохранить DBQuery» – vorou
Я думаю, что вы пробовали, потому что внутренний db .docs.find возвращает массив, а не документ. Сохранить можно сохранить документ. См. Редактирование. – Mzzl
спасибо, я уже обнаружил, что 'DBQuery' имеет метод' .toArray() ', который делает то, что я хочу. – vorou