子集合字段上不区分大小写的排序

时间:2019-09-27 10:25:33

标签: mongodb join

我知道mongodb中的Collation,但是由于我们的产品未在3.4上运行而无法使用它

话虽如此,我唯一的选择是将$toLower聚合管道与sort结合使用。

父表是 User ,每个用户在 Role 模型中都有一个角色引用。

User: _id: 123, role_id: 'role_1', name: 'Jai'
Role: _id: 'role_1', name: 'Role One'

我的查询如下所示,但我什至无法使投影正常工作:

> db.User.aggregate([{'$lookup': {"from": "Role", "localField": "role", "foreignField": "_id", "as": "role"}}, {'$project': {'role_lower': {'$toLower': '$role.name'}}}]).pretty()

获取错误:“无法从BSON类型数组转换为字符串”

我是在做错事还是无法实现?

2 个答案:

答案 0 :(得分:1)

$ toLower适用于字符串,但是查找返回一个数组,您需要在投影到角色之前首先使用$ unwind

答案 1 :(得分:0)

是的,我们必须解开数组结果。

这是您的查询:

db.user.aggregate([{'$lookup': {"from": "role", "localField": "role", "foreignField": "_id", "as": "role"}},{'$unwind':{path:"$role"}},{'$project':{"_id":1,"name":1,"role":{"$toLower":"$role.name"}}}])