在mongodb中按案例排序

时间:2016-05-24 05:15:17

标签: mongodb

我有一个域名"通知"

{
  _id: 1
  is_action: false,
  user:[{
        user_id: 5,
        status: "R"
    },
    {
        user_id: 8,
        status: "U"
    }],
    priority:1    
},
{
  _id: 2
  is_action: true,
  user:[{
        user_id: 5,
        status: "U"
    },
    {
        user_id: 8,
        status: "U"
    }],
    priority:1    
}

我的查询找到user_id = 5 ------

的通知
db.notifications.aggregate([
    {$unwind:"$user"},
    {$match:{
        "user.user_id":5,
        is_action: false
    }},
    {$sort:{priority:1}}
])

但我需要根据以下条件对上述查询进行排序

if(status == "U"){
    Sort by "priority"
}else{
    Sort by "_id"
}

1 个答案:

答案 0 :(得分:2)

使用$cond创建新字段,例如

{ $project: { otherfield: 1, sortField: { $cond: { if: { $eq: [ "$status","U" ] }, then: "$priority", else: "$_id" } } } }

然后对此字段进行排序。

P.S。 $ cond是MongoDB 2.6及以上版本的新运算符