2015-11-28 58 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

不,流星不允許自定義排序功能。你可以做的,就是用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} 
]; 

可以使用sortByincludes功能從lodash庫的水果爲每個用戶的收藏夾進行排序。

var sortedFruits = _.sortBy(fruits, function(fruit) { 
    return _.includes(user.favourites, fruit.id) ? 0 : 1; 
});