Как извлечь отдельные значения из базы данных Монго, используя Waterline и Sails.js (версия 0.10)?

С помощью Sails.js версия 0.10.x, предположим, у меня есть модель Dog, заполняется следующим образом (выписано в yaml формат для удобства, но в моем случае это на самом деле в mongo база данных.)

dogs:
-  breed: "wolf"
   name: "Fido"
-  breed: "wolf"
   name: "Roger"
-  breed: "dingo"
   name: "Nipper"
-  breed: "dingo"
   name: "Ernie"
-  breed: "corgi"
   name: "Bernadi"
-  breed: "corgi"
   name: "Queenie"
-  breed: "poodle"
   name: "Christopher"
-  breed: "poodle"
   name: "Tony"

etc

Поэтому сейчас я хочу создать список доступных пород.

Dog.find().exec(err, dogs) {
  breeds = [];
  dogs.each(function(dog)) {
    if (breeds.indexOf(dog.breed) === -1) breeds.push(dog.breed);
  }
  ...
}

Есть ли более простой способ сделать это с меньшим количеством попаданий в базу данных? Что-то вроде

Dog.find().distinct('breed').exec(function(err, breeds){
  ...
});

Я нашел эту закрытую проблему Ватерлинии, которая, кажется, указывает, что я мог использовать .distinct метод но я пробовал и увы не игра в кости.

Object [object Object] has no method 'distinct'

Как я могу сделать это эффективным способом для базы данных?

1 ответ

Решение

Для таких запросов вы можете использовать native метод для выполнения необработанной команды MongoDB:

Dog.native(function(err, collection) {
    collection.distinct('breed', function(err, dogs) {
        // do something here
    });
});
Другие вопросы по тегам