Как я могу отфильтровать документ в mongodb?

#mongodb

Вопрос:

У меня есть query коллекция в mongodb, которая содержит документ в приведенном ниже формате :

 {
    _id : ObjectId("61aced92ede..."),
    query : "How to solve...?",
    answer : []
    is_solved : false
}
 

Теперь я хочу отфильтровать документы со следующим условием

  1. фильтруйте все документы, которые не решены. ( is_solved : true )
  2. отфильтруйте «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.