Вам нужен $ replaceRoot этап конвейера, попробуйте:
db.col.aggregate([ { $replaceRoot: { newRoot: "$a.b" } } ])
SQLite поддерживает интеграцию с ICU. Согласно файлу Readme, sqlite/ext/icu/README.txt
sqlite/ext/icu/
каталог содержит исходный код для расширения "ICU" SQLite, интеграции библиотеки "International Components for Unicode" с SQLite.
1. Features
1.1 SQL Scalars upper() and lower()
1.2 Unicode Aware LIKE Operator
1.3 ICU Collation Sequences
1.4 SQL REGEXP Operator
Я принял ответ Doug Currie, но я хочу добавить некоторый "алгоритм", как сделать это, потому что sqlite3 документация является очень странной (по крайней мере, для меня).
хорошо, у нас есть работа sqlite3 и теперь:
это:
gcc -shared icu.c `icu-config --ldflags` -o libSqliteIcu.so
Это для Linux. Я также должен был установить дополнительный пакет разработки ICU:
sudo apt-get install libicu-dev
я работаю над архитектурой на 64 бита, и я получаю ошибку с __relocation R_X86_64_32S__
(независимо от того, что это означает:). GCC предложил добавить -fPIC
для компиляции опций, и он помог.
Выполнение sqlite3. Мы можем загрузить расширение командой:
.load './libSqliteIcu.so'
Предположение, что это находится в текущем каталоге, мы можем также определить целый путь.
Создают новое сопоставление:
SELECT icu_load_collation('pl_PL', 'POLISH');
первый параметр является желаемой локалью, и второе, это (это может быть что).
Теперь мы можем отсортировать данные с нашей новой локалью:
SELECT * FROM some_table ORDER BY name COLLATE POLISH;
И это нечувствительно к регистру!
Поскольку Doug Currie ответил, приказав, чтобы символы с диакритикой правильно могли быть включены путем загрузки расширение "ICU" SQLite
, расширение должно быть скомпилировано, как объяснено в собственном ответе kiew здесь. Однако название библиотеки, данное в ICU readme файл и в ответе kiew, не работало на меня. Этот другой ответ предложил использовать имя libicu.so
вместо этого.
, Таким образом, это - то, что работало на меня на Ubuntu 16.04 и на Фрагменте Debian 9.8:
sudo apt install libicu-dev libsqlite3-dev dpkg-dev gcc make
apt-get source sqlite3
cd sqlite3-*/ext/icu # assuming you have only 1 sqlite3 source directory
gcc -shared icu.c `icu-config --ldflags` -fPIC -o libicu.so
sudo cp libicu.so /usr/local/lib/
sudo ldconfig
После этого в sqlite3, Вы можете
.load libicu
SELECT icu_load_collation('', 'ICU');
, Этими 2 аргументами icu_load_collation
является локаль и пользовательское имя. Локаль, кажется, является дополнительной и может быть оставлена пустой. Пользовательское имя затем видимо с [1 112]
PRAGMA collation_list;
, И оно может использоваться в качестве в [1 113]
SELECT col FROM tbl ORDER BY col COLLATE ICU;