2015-12-21 2 views
1

Скажем, у меня есть коллекция с документами, как показано ниже:Сортировка документов, если поле больше 0?

{ 
    title: 'test2', 
    count: 0 
}, 
{ 
    title: 'test1, 
    count: 2 
}, 
{ 
    title: 'test3', 
    count: 3 
} 

Я хотел бы, чтобы они будут отображаться в следующем порядке:

  • Первый дисплей все документы, которые имеют подсчетом> 0 отсортированы по заглавие.
  • После этого отобразите все документы, у которых есть счет == = упорядочен по названию.

Значение вышеприведенные данные должны отображаться: title1, title3, title2

Так в основном сортировать по {count > 0}: 1, title: 1

Я начал с этим:

db.documents.find().sort({count: 1, title: 1})

Но это сортировка по кол, а не сортировка по количеству, превышающему 0.

Есть ли способ сделать это?

ответ

0

Это не возможно, используя find() заявление, но вы могли бы объединить его, как показано ниже:

  • $project поле, на основании которого результаты будут sorted- sort_field, если значение count является 0, дают это вес, если Infinity, так что он появляется в конце.

  • $sort на основе прогнозируемого поля. Код

образца:

db.document.aggregate([ 
{$project:{"title":1, 
      "count":1, 
      "sort_field":{$cond:[{$eq:["$count",0]},Infinity,"$count"]}}}, 
{$sort:{"sort_field":1,"title":1}}, 
{$project:{"count":1,"title":1}} 
]) 

тестовых данных:

db.document.insert([ 
{ 
    "title":"test2", 
    "count": 0 
}, 
{ 
    "title":"test1", 
    "count": 2 
}, 
{ 
    "title":"test3", 
    "count": 3 
} 
]) 

результат теста:

{ 
     "_id" : ObjectId("567887f8b506fc2193a2269b"), 
     "title" : "test1", 
     "count" : 2 
} 
{ 
     "_id" : ObjectId("567887f8b506fc2193a2269c"), 
     "title" : "test3", 
     "count" : 3 
} 
{ 
     "_id" : ObjectId("567887f8b506fc2193a2269a"), 
     "title" : "test2", 
     "count" : 0 
} 
1

Трюк будет использовать двух помощников.

helperName: function() { 
    return Somethings.find({count:{$gte:1}}, {sort: {title: //something}) 
} 
helperNameTwo: function() { 
    return Somethings.find({count:0}}, {sort: {title: //something}) 
} 
+0

Ну, я также хочу, чтобы документы, имеющие счет 0. Не исключено ли это? –

+0

Не уверен, что тогда я понимаю ваш вопрос. Итак, вы хотите показать все документы, но самый высокий счет должен быть сверху/ниже внизу? – Luna

+0

Все документы должны быть включены. Документы с любым счетом должны быть в порядке, указанном по названию. Документы с нулем должны быть ниже, чем указано по названию. Я приведу пример в моем вопросе, который может помочь. –

Смежные вопросы