0
我有一个大的数据集,有时相互交叉引用的文档,有时不。在基于这些交叉引用映射精简之前,我必须将交叉引用的数组设置为交叉引用中的每个值都相同。MongoDB:函数来巩固阵列
我用这个在shell功能来巩固这些阵列:
function fixArray2() {
var counter = 0;
// I only want the xref for each field, I don't even want the id
var cursor = db.catalog.find({}, {xref: true, _id: false});
// I don't want to init this inside the loop, worried about memory leaks
var consolidatedArray = [];
while (cursor.hasNext()) {
var xref1 = cursor.next().xref;
// first pass: create a consolidated array when the cross references match
var limitedCursor1 = db.catalog.find({"name":{$in:xref1}});
while (limitedCursor1.hasNext()) {
var doc1 = limitedCursor1.next();
consolidatedArray = consolidatedArray.concat(doc1.xref);
}
consolidatedArray = consolidatedArray.unique();
// now that we have the consolidated array, reset the xref field of the object to it
for (var i=0; i<consolidatedArray.length; i++) {
db.catalog.update({name:consolidatedArray[i]},{$set:{xref: consolidatedArray}},false, true);
}
consolidatedArray.length = 0;
counter++;
if (counter % 1000 == 0) {
print("Processed " + counter + " documents.");
}
}
}
它的工作原理,但我必须相当频繁运行它。任何人都可以改进?
我从中央归档中检索数据,并通过mongoimport进行导入,因此预处理数据会有点困难。 – Jason
我可以按原样导入它,然后编写一些代码,以便在导入这些结果并将结果存储在另一个集合中之后以我想要的形式得到它。 –
标记为已接受。不是我喜欢这样做的方式,但仍然是一个很好的答案。 – Jason