Node.js mongoose: как использовать методы запроса .in и .sort? - PullRequest
5 голосов
/ 24 декабря 2010

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

db.model("Person").find().sort(???).all(function(people) { });

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

db.model("Movie").find().in(???).all(function(movies) { });

У кого-нибудь есть идеи? Или, что еще лучше, ссылка на исчерпывающую документацию?

Спасибо!
Chris

Ответы [ 2 ]

9 голосов
/ 26 декабря 2010

Да, документация mongoose отстает по некоторым из этих вещей, и, к сожалению, решение не очень интуитивно (приходит с территорией, когда используется что-то, все еще проходящее быструю разработку и изменения API на пути к версии 1.0)

Между тем, это будет делать то, что вы ищете с точки зрения сортировки:

db.model("Person").find().sort([['age','ascending']]).all(function(people) { });

Что касается вопроса о более сложных вложенных отношениях, если вы еще этого не сделали, вы можете начатьс превосходной документацией MongoDB , в частности статьями по Схема , Расширенные запросы и Точечная нотация (доступ к объектам).Знание MongoDB внутри и снаружи должно сделать навигацию по мрачным частям мангуста на одном дыхании.

Вот пример поиска фильмов по жанрам с использованием $ in:

db.model("Movie").find({ 'genres': { $in: ['Horror','Comedy'] } }).all(function(movies) { });
2 голосов
/ 09 января 2012

Ответ Даниэля не сработал для меня. Я считаю, что API изменился с 1.0.14 (http://groups.google.com/group/mongoose-orm/browse_thread/thread/cc77914021940e73/34fc6f45938a2242?lnk=raot)

Вот что у меня сработало:

db.model("Person")
  .find()
  .sort('age', 1)
  .execFind(function(err, people) { 
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...