Mongo-在$ project不起作用之后进行排序

时间:2018-07-17 13:50:31

标签: mongodb sorting mongoose aggregation-framework project

我有三个集合-文章,类别和用户。每篇文章可以有作者和副作者,我想列出currentUser数据-它可以是用户名或昵称,因为用户可以使用两种不同的类型。我为此进行了汇总,但工作正常,但是使用currentUser投影列的$ sort无效-是的,它排序为“ something”,但不确定是什么,因为“ aaa”在开头,然后是“ Test”并在结尾是...“第二次测试”。应该在中间。

我使用$ project和$ cond来获取-首先,使用当前用户ID的特定作者,然后使用用户名或昵称。结果还可以,只有排序失败了。

顺便说一句。是从查询中仅获取一条记录而不是使用$ arrayElemAt的更好方法吗?

[ { '$match': <MY CONDITIONS> },
  { '$lookup': 
     { from: 'categories',
       localField: 'category',
       foreignField: '_id',
       as: 'categories' } },
  { '$lookup': 
     { from: 'users',
       localField: 'author',
       foreignField: '_id',
       as: 'author' } },
  { '$lookup': 
     { from: 'users',
       localField: 'subauthor',
       foreignField: '_id',
       as: 'subauthor' } },
  { '$project': 
    { _id: 1,
       name: 1,
       status: 1,
       updatedAt: 1,
       currentUser: {
          '$cond': {
            'if': { '$eq': [ userId, '$creator'] },
            'then': {
              '$cond': {
                'if': { '$eq': [ '', {'$arrayElemAt': ['$author.username', 0]} ] },
                'then': {'$arrayElemAt': ['$author.nickname', 0]},
                'else': {'$arrayElemAt': ['$author.username', 0]}
              }
            },
            'else': {
              '$cond': {
                'if': { '$eq': [ '', {'$arrayElemAt': ['$subauthor.username', 0]} ] },
                'then': {'$arrayElemAt': ['$subauthor.nickname', 0]},
                'else': {'$arrayElemAt': ['$subauthor.username', 0]}
              }
            }
          }
        },
    } 
  },
  { '$sort': { currentUser: 1 } }
]

1 个答案:

答案 0 :(得分:0)

我找到了解决方法-这是因为缺少排序规则。添加了区域设置en_US / strength = 1,现在可以正常使用了。