2010-06-17 3 views
2

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

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

Выполненная эту функцию в консоли Монго, а затем продолжил, чтобы запустить этот:

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

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

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

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

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

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

ответ

1

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

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

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

Смежные вопросы