Сортировка без учета регистра в дочернем поле коллекции - PullRequest
0 голосов
/ 27 сентября 2019

Мне известно о Сличении в mongodb, но я не могу его использовать, так как наше производство не работает на 3.4

Сказав это, мой единственный другой вариант использует $ toLower конвейер агрегации в сочетании с сортировкой.

Родительская таблица: Пользователь , и у каждого пользователя есть ссылка на роль в Роль модели.

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 ]

1 голос
/ 27 сентября 2019

$ toLower работает со строкой, но при поиске возвращается массив, который необходимо использовать, прежде чем использовать $ unwind перед проекцией на роль

0 голосов
/ 27 сентября 2019

Да, мы должны размотать результат массива.

Вот ваш запрос:

db.user.aggregate([{'$lookup': {"from": "role", "localField": "role", "foreignField": "_id", "as": "role"}},{'$unwind':{path:"$role"}},{'$project':{"_id":1,"name":1,"role":{"$toLower":"$role.name"}}}])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...