2015-11-28 3 views
0

У меня есть коллекция fruits {name:'orange', id:1}.... и другая users, user s есть документ favorites: [1,2,3]. Сначала я хочу отображать фрукты favourite, а затем остальные.Пользовательский вид вложенного документа

Я могу запросить дважды, как сначала с fruits.find({id: {$id:[user.favorites]}}), а затем с not in, а затем слить их.

Есть ли другой способ сделать это? Есть ли возможность передать пользовательскую функцию до sort, если да. Как я могу это сделать?

ответ

1

Нет, Meteor не позволяет выполнять функцию пользовательского сортировки. Что вы можете сделать, это использовать sortBy() и contains() функции из библиотеки underscore сортировать элементы:

var fruitsSorted = _.sortBy(fruits.find(selector).fetch(), (fruit) => { 
    if(_.contains(user.favorites, fruit.id)){ 
     return 0; 
    } 
    return 1; 
}); 

Теперь у вас есть отсортированный массив в fruitsSorted.

1

Допустим, вы запросили fruits коллекцию для всех фруктов.

var fruits = [ 
    { name: 'orange', id: 1}, 
    { name: 'apple', id: 2}, 
    { name: 'banana', id: 3} 
]; 

Теперь вы можете использовать sortBy и includes функции из библиотеки lodash для сортировки фруктов, как на пользователя любимцев.

var sortedFruits = _.sortBy(fruits, function(fruit) { 
    return _.includes(user.favourites, fruit.id) ? 0 : 1; 
}); 
Смежные вопросы