MongoDB: Создать поле точного соответствия - PullRequest
0 голосов
/ 12 июля 2019

Я пытаюсь упорядочить некоторые данные и хочу получить точное совпадение в качестве первых результатов, а затем остальных.

Я пытался использовать этот $ eq in $ project, но, похоже, что-то не получитсяработа.

Можно ли сделать что-то подобное?

db.getCollection('words').aggregate([
    { $match: { "kanji.text": /^彼/ } },
    { $project: { 
        "kanji": 1,
        "kana": 1,
        "sense":1,
        "exact": { 
           $eq : [ "$kanji.0.text", "彼" ]
        }
      }
    },
    { $sort: {"exact": 1} }
])

Структура документа:

Document Structure

РЕДАКТИРОВАТЬ: У меня естьнашел плохой обходной путь

db.getCollection('words').aggregate([
    { $match: { "kanji.text": /^彼/ } },
    { $limit : 10 },
    { $addFields: {
        exact: {
            $filter: {
                input: '$kanji.text',
                cond: {
                    $eq: ['$$this', "彼"]
                }
            }
        }
    }},
    { $project: { 
        "kanji": 1,
        "kana": 1,
        "sense":1,
        "exact": 1
      }
    },
    { $sort: {"exact.0": -1} }
])
...