我有两个集合(coll_1,coll_2),每个集合有数百万个文档。如何比较两个集合中的所有文档和数百万个文档,并在第三个集合中将差异写入MongoDB中
这两个集合实际上是通过运行来自同一数据源的代码的两个版本创建的,因此两个集合将具有相同数量的文档,但两个集合中的文档可能缺少一个字段或子文档或具有不同的值,但这两个集合的文档将具有相同的primary_key_id,这被索引。
我保存在数据库这个javascript函数来获得差异
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;
}
});
其中运行良好这样
diffJSON(testObj1, testObj2);
问题:如何在coll1和coll2运行diffJSON,和将diffJSON结果与primary_key_id一起输出到coll3。
我是MongoDB的新手,我知道JOINS不像RDBMS那样工作,所以我想知道是否必须在一个集合中复制两个比较文档,然后运行diffJSON函数。
此外,大部分时间(比如说90%)的文档在两个集合中都是相同的,我只需要知道只有10%的文档有任何差异。
下面是一个简单的例子文件: (但真正的DOC约为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"] };
如果你知道一个更好的方式来diff的文件,请随时建议。