Например:MongoDB результат запроса из нескольких коллекций и сохранить в одном
1.Using найти, проверить каждую коллекцию:
var objIdMin = ObjectId(Math.floor((new Date('2016/05/01 00:00:00'))/1000).toString(16) + "0000000000000000");
var objIdMax = ObjectId(Math.floor((new Date('2016/05/11 00:00:00'))/1000).toString(16) + "0000000000000000");
db.getCollection('google').find({ _id:{$gt: objIdMin, $lt: objIdMax}, 'result.text':/phone/}).count();
Google Количество коллекции результат 50.
db.getCollection('apple').find({ _id:{$gt: objIdMin, $lt: objIdMax}, 'result.text':/phone/}).count();
количество результатов сбора яблок составляет 100.
2.если я вернусь, чтобы достичь своей цели:
var cols = db.getCollectionNames();
var objIdMin = ObjectId(Math.floor((new Date('2016/05/01 00:00:00'))/1000).toString(16) + "0000000000000000");
var objIdMax = ObjectId(Math.floor((new Date('2016/05/11 00:00:00'))/1000).toString(16) + "0000000000000000");
var cols_in = ['google', 'apple'];
for (var i=0; i<cols_in.length; i++){
db.getCollection(cols_in[i]).aggregate([ { $match: { _id:{$gt: objIdMin, $lt: objIdMax}, 'result.text':/phone/}}, { $out: "target" } ]);
};
Количество результата target collection
«s равно 100 (то же самое, как apple collection
), поэтому впоследствии коллекция будет перезаписывать бывший, как решить эту проблему?
Edit: Я считаю, что из-за:
Заменить существующую коллекцию
Если коллекция определяется операцией $ из уже существует, то после завершения агрегации , этап $ out атомарно заменяет существующую коллекцию новой коллекцией результатов . Операция $ out не изменяет индексов, существовавших в предыдущей коллекции . Если агрегация завершилась неудачей, операция $ out не делает изменений в уже существующей коллекции.
Итак, единственный способ - просмотреть каждую запись и вставить в другую коллекцию?
Я прошу способ без использования для цикла. – Mithril
@ Митрил - отредактированный – profesor79