Можно ли выполнить функцию в Mongo, которая принимает какие-либо параметры? - PullRequest
2 голосов
/ 17 июня 2010

Я ищу написать функцию для выполнения пользовательского запроса к коллекции в Монго.Проблема в том, что я хочу использовать эту функцию повторно.Моя мысль была (очевидно, надуманной):

var awesome = function(count) {
  return function() {
    return this.size == parseInt(count);
  };
}

Выполнил эту функцию в консоли Mongo, а затем приступил к выполнению этого:

db.collection.find(awesome(5));

Однако я получаю эту ошибку:

error: {
    "$err" : "error on invocation of $where function:
JS Error: ReferenceError: count is not defined nofile_b:1"
}

Итак, похоже, что Монго не соблюдает прицел, но я действительно не знаю почему.Любое понимание будет приветствоваться.

Чтобы глубже понять, что я хотел бы сделать:

Коллекция документов имеет значения широты / долготы, и я хочу найти все документы ввогнутый или выпуклый многоугольник.У меня есть написанная функция, но в идеале я смогу повторно использовать эту функцию, поэтому я хочу передать массив точек, составляющих мой многоугольник, в функцию, которую я выполняю на конце Монго.Я посмотрел на геопространственные запросы Mongo, и в настоящее время он поддерживает круговые и рамочные запросы - мне нужно что-то более сложное.

1 Ответ

1 голос
/ 18 июня 2010

Вам нужно сохранить эту функцию в базе данных, если вы хотите использовать ее в запросе. Есть:

db.system.js.save({_id : "awesome", value : 
... function(count) { 
...     return this.size==count;
... }})
db.collection.find({"$where" : "awesome(5)"})

Оболочка не является самой базой данных, поэтому вы не можете определить что-то в оболочке и использовать ее в базе данных, так же как вы не можете определить переменную в Python и ожидать, что база данных узнает об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...