Функция MongoDB возвращает результат [неизвестный тип]

Я использую Mongo v3.2, и я написал хранимую функцию, которая перебирает почти 6000 документов (каждый документ ~29 КБ). Параметры представляют собой целочисленный массив "A" (длина: 2048) и другое целое число "n". Функция сравнивает 'A' со списками, подобными A, присутствующими в каждом документе, чтобы найти сходство по косинусу и вернуть список из n словарей. (Я также отфильтровал документы, которые не имеют списка A-like)

Каждый раз, когда я запускаю функцию из оболочки Монго, она дает мне 2 экрана результатов. Первый имеет массив "А", а второй [неизвестный тип]. Я попытался использовать batchSize(5) и все тот же результат. Но когда я запускаю тот же запрос и устанавливаю лимит (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);}

0 ответов

Другие вопросы по тегам