私は2つのコレクション(coll_1、coll_2)にそれぞれ100万個のドキュメントを持っています。2つのコレクションのすべてのドキュメントを何百万というドキュメントと比較し、MongoDBの3番目のコレクションにdiffを書き込む方法
これらの2つのコレクションは、同じデータソースから2つのバージョンのコードを実行することによって実際に作成されるため、2つのコレクションの文書数は同じですが、両方のコレクションの文書には、または異なる値を持つことができますが、両方のコレクションのドキュメントにはと同じprimary_key_idがインデックスされます。
私はこの
diffJSON(testObj1, testObj2);
質問のように正常に動作デフ
db.system.js.save({
_id: "diffJSON", value:
function(obj1, obj2) {
var result = {};
for (key in obj1) {
if (obj2[key] != obj1[key]) result[key] = obj2[key];
if (typeof obj2[key] == 'array' && typeof obj1[key] == 'array')
result[key] = arguments.callee(obj1[key], obj2[key]);
if (typeof obj2[key] == 'object' && typeof obj1[key] == 'object')
result[key] = arguments.callee(obj1[key], obj2[key]);
}
return result;
}
});
取得するには、DBに保存されたこのjavascript関数があります。coll1とcoll2上diffJSONを実行する方法をし、 primary_key_idとともにcoll3にdiffJSON結果を出力します。
MongoDBの新機能で、JOINSがRDBMSと似たように動作しないことを理解しています。したがって、2つの比較ドキュメントを1つのコレクションにコピーしてからdiffJSON関数を実行する必要があります。
また、2つのコレクションのほとんどの時間(たとえば90%)のドキュメントは同じになります。差分があるドキュメントの約10%しか知りません。あなたが文書をdiffをするより良い方法を知っていれば、自由にしてください (しかし、実際のドキュメントは、あなたが規模を知っているだけのようにサイズが周り15Kである)
var testObj1 = { test:"1",test1: "2", tt:["td","ax"], tr:["Positive"] ,tft:{test:["a"]}};
var testObj2 = { test:"1",test1: "2", tt:["td","ax"], tr:["Negative"] };
:ここ
は簡単な例の文書であります提案する。