Как извлечь отдельные значения из базы данных Монго, используя 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
});
});