【发布时间】:2017-07-02 04:42:10
【问题描述】:
我有两个集合(coll_1,coll_2),每个集合有一百万个文档。
这两个集合实际上是通过运行来自同一数据源的两个版本的代码创建的,因此两个集合将具有相同数量的文档,但两个集合中的文档可能缺少一个字段或子文档,或者具有不同的值,但两个集合的文档将具有相同的 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% 的文档有任何差异。
这是一个简单的示例文档: (但真正的文档大小约为 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"] };
如果您知道比较文档的更好方法,请随时提出建议。
【问题讨论】:
标签: mongodb mongodb-query