MongoDB Сортировать определенные документы в первую очередь - PullRequest
1 голос
/ 04 марта 2020

Допустим, у меня есть следующая коллекция

Collection = [
    {name: 'Ann'},
    {name: 'Bob'},
    {name: 'Cecil'},
    {name: 'KEY: John'},
    {name: 'KEY: Cecil'},
    {name: 'Susan'},
    {name: 'Zack'}
];

Можно ли использовать sort в MongoDB, чтобы я мог иметь все Documents, у которых их поле name начинается с KEY: вернуть первым? И тогда я бы хотел, чтобы остальная часть Collection была отсортирована в том виде, в каком она есть в данный момент.

Т.е.

Collection = [
        {name: 'KEY: John'},
        {name: 'KEY: Cecil'},
        {name: 'Ann'},
        {name: 'Bob'},
        {name: 'Cecil'},
        {name: 'Susan'},
        {name: 'Zack'}
    ];

Из того, что я прочитал, нет способа сделать кастом сортировать в MongoDB. Если нет, есть ли простой способ сделать это в JS, используя underscore или какую-либо другую библиотеку. Я бы предпочел это, чем принятый здесь ответ Сортировать массив так, чтобы в нем сначала было указано c элементов , где должен быть построен другой массив (-ы).

Есть идеи?

1 Ответ

1 голос
/ 04 марта 2020

Вы можете использовать $ addFields для оценки нового поля, по которому будет отсортирована ваша коллекция. Оператор $ indexOfBytes может использоваться для определения, начинается ли строка с KEY:

db.collection.aggregate([
    {
        $addFields: {
            startsWithKey: { $eq: [ { $indexOfBytes: [ "$name", "KEY", 0 ] } ]}
        }
    },
    {
        $sort: {
            startsWithKey: -1
        }
    }
])

Пн go Детская площадка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...