#mongodb
Вопрос:
У меня есть query
коллекция в mongodb, которая содержит документ в приведенном ниже формате :
{
_id : ObjectId("61aced92ede..."),
query : "How to solve...?",
answer : []
is_solved : false
}
Теперь я хочу отфильтровать документы со следующим условием
- фильтруйте все документы, которые не решены. (
is_solved : true
) - отфильтруйте «n» количество решаемых документов.
Таким образом, в результате будут все нерешенные документы и только 10 решенных документов в массиве.
Ответ №1:
Вы можете использовать этот запрос агрегации:
- Сначала используйте $facet для создания двух способов: Документ решен, а документ не решен.
- В каждом случае делайте необходимые
$match
и$limit
разрешенные документы. - Затем объедините значения, используя
$concatArrays
.
db.collection.aggregate([
{
"$facet": {
"not_solved": [
{
"$match": {
"is_solved": false
}
}
],
"solved": [
{
"$match": {
"is_solved": true
}
},
{
"$limit": 10
}
]
}
},
{
"$project": {
"result": {
"$concatArrays": [
"$not_solved",
"$solved"
]
}
}
}
])
Пример здесь, где я привык $limit: 1
видеть проще.
Кроме того, если вы хотите, вы можете добавить $unwind
в конце агрегирования, чтобы получить значения на верхнем уровне, как в этом примере
Комментарии:
1. Я искал какой-то намек. Но спасибо за эти большие усилия, особенно для playground.