Пользовательский поисковый запрос MongoDB - PullRequest
0 голосов
/ 01 января 2012

В моей базе данных есть документы, которые содержат свойство foo.Для каждого значения foo у меня есть функция, которая либо возвращает true, либо false.Как я могу запросить все документы, для которых значение foo заставляет функцию возвращать true?

Ответы [ 3 ]

3 голосов
/ 01 января 2012

Если вам нужно проверить, является ли значение вашего строкового поля одним из нескольких, вам нужен модификатор $ in .

db.collection.find( { field : { $in : array } } );

Работает быстро и использует индекс (если возможно).

Если ваше поле является массивом и вы передаете строку, используйте этот синтаксис.

db.collection.find({array_field : string_value});

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

1 голос
/ 01 января 2012

Это действительно зависит от того, что это за функция и как вы ее используете.Является ли функция постоянной для какой-либо записи?Это даже функция, которую вы можете оценить на сервере базы данных?...

В крайнем случае, если вам нужно часто проверять это значение, вы можете, например, создать поле, которое существует только тогда, когда f (foo) имеет значение true, а затем создать разреженный индекс для этого поля..

$, где вполне может быть решение, которое вы ищете, но в зависимости от шаблонов доступа может быть лучшее решение.

1 голос
/ 01 января 2012

Вы можете использовать $, где .

Пример:

db.myCollection.find( { $where: "this.a > 3" });
db.myCollection.find( "this.a > 3" );
db.myCollection.find( { $where: function() { return this.a > 3;}});

Обратите внимание, это выполняется в Javascript. Это означает две вещи.

  1. Вы можете поместить произвольный Javacript в выражение $where (форма функции).

  2. Это будет значительно медленнее, чем обычные запросы.

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