Mongodb:按键和值对列表进行排序

时间:2016-10-27 11:59:47

标签: mongodb mongodb-query

我有一条记录,我想在发送到前端之前对其进行排序。

db.getCollection('users').find({$or:
                    [
                       {createdBy: 'abhi'},
                       {createdBy: {'$ne': 'abhi'}, visibility: 'public'}
                    ]}).sort({'createdBy': 1})

我想先对 createdBy 用户 abhi 的所有记录进行排序,然后再对其他用户进行排序。

类似:

.sort({'createdBy == abhi': 1})

1 个答案:

答案 0 :(得分:1)

您可以使用聚合来实现这一目标。

  1. 如果first: truecreatedBy其他abhi
  2. ,请对文档字段进行新投影并添加临时标记字段first: false
  3. {first:-1, createdBy:1}排序,将标记的字段放在排序列表中
  4. (重新)投影您的字段以删除临时字段first
  5. 代码:

    db.users.aggregate([
        {$project: 
            {   
                first: 
                {
                    $cond: { if: { "$eq": ["$createdBy", 'abhi' ]}, then: true, else: false }
                },
                createdBy: '$createdBy'
            }
        },
        {$sort: {first:-1, "createdBy": 1}},
        {$project: 
            {
                createdBy: 1
                // Don't include first:1
            }       
        }
    ])