に保存します。MongoDBのクエリの結果とは、例えば1
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
の結果のカウントは(apple collection
と同じ)100に等しいので、後でコレクションは、前者が上書きされますか?
編集:コレクションは、集計が完了した時点で そして、操作がすでに存在している$うちで指定された場合は、既存のコレクション
を交換し
: 私はそれが原因にある見つけます$ outステージは、既存のコレクションを新しい結果コレクションに置き換えます( )。 $を実行しても、以前の コレクションに存在していたインデックスは変更されません。集計が失敗した場合、$ out操作は既存のコレクションへの変更を にしません。
唯一の方法は、すべてのレコードをforeachし、別のコレクションに挿入することですか?
私は、forループを使用せずに道を求めています。 – Mithril
@ミスリル - 編集中 – profesor79