按字段是否大于0对文档进行排序?

时间:2015-12-21 22:49:06

标签: mongodb meteor

假设我有一个包含以下文档的集合:

title1, title3, title2

我希望它们按以下顺序显示:

  • 首先显示所有具有计数的文档> 0由标题订购。
  • 之后显示所有具有count == =按标题排序的文档。

表示上述数据应显示:{count > 0}: 1, title: 1

所以基本上按db.documents.find().sort({count: 1, title: 1})

排序

我从这开始:

{{1}}

但这会按计数排序,而不是按计数是否大于0进行排序。

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:1)

一个技巧就是使用两个助手。

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

答案 1 :(得分:0)

使用find()语句无法做到这一点,但您可以按以下方式对其进行汇总:

  • $project一个字段,根据该字段对结果进行排序 - sort_field,如果count值为0,则为Infinity赋予权重$sort 1}},以便最后出现。

  • {{3}}基于预计字段。

示例代码:

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
}