Поиск во вложенных массивах Mongodb - PullRequest
1 голос
/ 25 мая 2020

У меня есть mongodb с некоторыми JSON данными, которые включают и вложенные массивы. Я пытаюсь сделать запрос, чтобы подсчитать, сколько документов имеют определенное значение. Например, вот как выглядят мои json данные:

{
 "_id" : ObjectId("5ecb815bf4b8512918224e71"),
    "array1" : [ 
        {
            "_id" : ObjectId("5ecb815bf4b8512918224e85"),
            "xxxx" : "1450",
            "yyyy" : 83,
            "array2" : [ 
                {
                    "_id" : ObjectId("5ecb815bf4b8512918224e88"),
                    "aaaa" : "1470420945276",

                }, 
                {...},
                {...}]
}

Я пытаюсь выполнить следующий запрос:

db.example.aggregate([
            {
               $project: {
                  value1: {
                     $filter: {
                        input: "$array1",
                        as: "array",
                        cond: { $eq: [ "$$array.array2.aaaa" , "1470420945276" ] }
                     }
                  }
               }
            },
            {
               $project: {
                  value1Count: { $size: "$value1" }
               }
            }
         ])

Но не работает и возвращает это значение 1Count = 0. Похоже, он не переходит в array2, чтобы прочитать значение 'aaaa'. Любая помощь?

1 Ответ

0 голосов
/ 25 мая 2020

Вы почти достигли желаемого значения. Проблема в том, что $$array.array2.aaaa возвращает значение array, поэтому мы не можем использовать здесь $eq. Вместо этого мы должны использовать оператор $in.

db.example.aggregate([
  {
    $project: {
      value1: {
        $filter: {
          input: "$array1",
          as: "array",
          cond: {
            $in: [
              "1470420945276",
              "$$array.array2.aaaa"
            ]
          }
        }
      }
    }
  },
  {
    $project: {
      value1Count: {
        $size: "$value1"
      }
    }
  }
])

MongoPlayground | Альтернативное решение

...