mongodb sort by dynamic property [duplicate]

Он делает это, потому что input.nextInt(); не фиксирует новую строку. вы могли бы сделать, как и другие, добавив под ним input.nextLine();. В качестве альтернативы вы можете сделать это в стиле C # и разобрать nextLine на целое число так:

int number = Integer.parseInt(input.nextLine()); 

Выполнение этого работает так же хорошо, и оно сохраняет строку кода.

5
задан Blakes Seven 6 October 2015 в 04:48
поделиться

1 ответ

Если вы хотите «весить» результаты по определенным критериям или иметь какое-либо «вычисленное значение» в «сортировке», тогда вам понадобится метод .aggregate() . Это позволяет использовать «прогнозируемые» значения в операции $sort , для которой может использоваться только настоящее поле в документе:

db.messages.aggregate([
    { "$match": { "messages": userId } },
    { "$project": {
        "recipients": 1,
        "unread": 1,
        "content": 1,
        "readYet": {
            "$setIsSubset": [ [userId], "$unread" ] }
        }
    }},
    { "$sort": { "readYet": -1 } },
    { "$limit": 20 }
])

Здесь $setIsSubset позволяет сопоставить «непрочитанный» массив с преобразованным массивом [userId], чтобы увидеть, имеются ли какие-либо совпадения. Результат будет либо true, где существует userId, либо false, где это не так.

Затем это можно передать в $sort, который заказывает результаты с предпочтениями совпадений (сортировка сортировки является true сверху), и, наконец, $limit просто возвращает результаты до указанной суммы.

Итак, чтобы использовать заданный термин для «сортировки», значение должно быть «проецировано» в документ, чтобы его можно было отсортировать. Структура агрегации - это то, как вы это делаете.

Также обратите внимание, что $elemMatch не требуется только для того, чтобы соответствовать одному значению в массиве, и вам нужно только указать значение напрямую. Это цель, где «несколько» условий должны выполняться на одном элементе массива, что, конечно, здесь не применяется.

5
ответ дан Blakes Seven 29 August 2018 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: