我知道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类型数组转换为字符串”
我是在做错事还是无法实现?
答案 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"}}}])