Сортировка работает так же, как в MongoDB, но вы можете сделать это «на лету» с помощью агрегата:
Возьмите следующие данные:
{ "field" : "BBB" }
{ "field" : "aaa" }
{ "field" : "AAA" }
Итак, со следующим утверждением:
db.collection.aggregate([
{ "$project": {
"field": 1,
"insensitive": { "$toLower": "$field" }
}},
{ "$sort": { "insensitive": 1 } }
])
Произведут такие результаты, как:
{
"field" : "aaa",
"insensitive" : "aaa"
},
{
"field" : "AAA",
"insensitive" : "aaa"
},
{
"field" : "BBB",
"insensitive" : "bbb"
}
Фактический порядок вставки будет поддерживаться для любых значений, приводящих к тому же ключу при преобразовании.
Если подпись односторонняя и используется, то ее изменение приведет к поломке мест ее использования, если только изменения не совместимы с тем, как она использовалась (изменение int
на Integer
, для например, часто совместим благодаря авто-боксу).
Обычно добавляется перегрузка с новой сигнатурой, оставляя оригинальный метод на месте (хотя вы можете изменить его реализацию). Например, если оригинал был:
void m(Something a, SomethingElse b, YetAnotherThing c) {
// ...
}
добавление перегрузки / некоторых перегрузок:
void m(Something a, SomethingElse b, YetAnotherThing c, ANewThing d) {
// ...
}
// or
void m(Something a, SomethingElse b) {
// ...
}
// or
void m(ANewThing d) {
// ...
}
не сломает клиентов, используя этот оригинальный метод (при условии, что реализация продолжает делать то, что это было раньше, даже если он делает это по-другому).