我正在使用Mongo v3.2并且我已经编写了一个存储函数,它迭代了近6,000个文档(每个文档大约29kB)。参数是整数数组' A' (长度:2048)和另一个整数' n'该功能比较A'在每个文档中都有一个类似A的列表来查找余弦相似度,并返回一个' n'字典。 (我还过滤掉了没有A类列表的文件)
每次从mongo shell中激活该函数时,它都会给出2个结果屏幕。第一个有阵列' A'第二个 [未知类型] 。我尝试使用batchSize(5)并仍然使用相同的结果。但是当我运行相同的查询并设置limit(100)时,它会给我预期的结果格式。
我认为该功能正在破碎,因为每个文档的文档数量和大小都有点大。如果是这种情况(或不是),我该如何解决?
(编辑)代码:
function(A1, n) {
var list = [];
var cursor = db.product.find({A2:{$exists: true}}, no_cursor_timeout=true);
cursor.forEach(function(doc) {
var A2 = doc.A2;
/*
formula: (a = A1, b = A2)
num = a(0)*b(0) + a(1)*b(1) ... +a(2047)*b(2047)
den = sqrt([ a(0)^2 + a(1)^2 ... ]*[ b(0)^2 + b(1)^2 ...]) => L2 normal form of both arrays
similarity = num / den
distance = 1 - similarity
*/
var result = { "field1": val1, "distance": distance };
list.push(result);
});
list.sort(function(a, b){return a.distance- b.distance});
var newlist = list.slice(0,n);
cursor.close();
return (newlist);}