MongoDB: сортировка строк UTF-8 - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть этот агрегат, и я сортировал поле (_id.name) с использованием lowerCase и UTF-8 , но я не могу отсортировать строки, такие как "á" или "Á" или что-то вроде , Как мне отсортировать строки utf-8 и lowerCase?

Совокупный:

Schedule.aggregate([{
      $match: {
        store: req.body.store,
        scheduleStart: {
          $lte: start,
          $gte: req.body.period
        },
        status: {
          $in: resultStatus
        }
      }
    },
    {
      $group: {
        _id: {
          name: "$employee.name",
          id: "$employee.id"
        },
        totalValue: {
          $sum: "$value"
        },
        totalServices: {
          $sum: 1
        },
        totalComission: {
          $sum: "$comissionValue"
        }
      }
    },
    {
      '$addFields': {
        'ticket': {
          '$divide': ['$totalValue', '$totalServices']
        }
      }
    },
    {
      $sort: {
        "_id.name": 1
        }
    },
    {
      $skip: req.body.limit * req.body.page
    }

Редактировать

Теперь я использую сопоставление следующим образом:

 Schedule.aggregate([{
     ...     
    {
      $sort: {
        "_id.name": 1
      }
    },
    {
      $skip: req.body.limit * req.body.page
    }

  ], { "collation": { "locale": "pt" }}).exec((error, response) => {
    if (error) res.status(500).send({
      error,
      code: 0,
      message: langs[req.query.lang].somethingWentWrong
    });

ОШИБКА: MongooseError: Callback должен быть функцией, получил [объект Object]

1 Ответ

0 голосов
/ 05 ноября 2018

Использование collation здесь с locale: "en"

С агрегацией вы можете сделать что-то вроде этого (mongodb)

Schedule.aggregate([{ "$sort": { "_id.name": 1 }}], { "collation": { "locale": "en" }})

С мангустом вы можете использовать сопоставление внутри вашей схемы

var schema = new Schema({
  name: String
}, { collation: { locale: 'en' })

Schedule.aggregate([{ "$sort": { "_id.name": 1 }}]).exec((error, response) => {
  console.log(response)
})
...