Mongodb, как найти документы с более чем 2 элементами массива с определенным значением - PullRequest
1 голос
/ 24 мая 2019

Может кто-нибудь сказать мне, пожалуйста, как найти элементы в массиве Mongodb, который содержит более 2 элементов с определенным значением?Например, если у меня есть два таких документа:

{
    someArray: [
        {'aaa' => 1},
        {'aaa' => 1}
    ]
}
{
    someArray: [
        {'aaa' => 1},
        {'aaa' => 2}
    ]
}

Мне нужно найти первый документ, который содержит два элемента, значение aaa которых равно 1 .Я не имею в виду $ elemMatch, мне нужно посчитать количество подходящих элементов.Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Вы можете использовать агрегацию ниже:

db.col.aggregate([
    {
        $match: {
            $expr: {
                $gte: [
                    { $size: { $filter: { input: "$someArray", cond: { $eq: [ "$$this.aaa", 1 ] } } } },
                    2
                ]
            }
        }
    },
    {
        $limit: 1
    }
])

$ filter позволяет применить ваше условие, затем вы можете использовать $ size , чтобы получить длинуотфильтрованный массив и сравните его с вашим значением, используя $gte

0 голосов
/ 24 мая 2019

Вы можете использовать $indexOfArray, чтобы определить, содержит ли массив этот элемент, а затем сравнить с $size из массив, используя $eq

db.collection.find({
  "$expr": {
    "$and": [
      { "$ne": [{ "$indexOfArray": ["$someArray.aaa", 1] }, -1] },
      { "$eq": [{ "$size": "$someArray" }, 2] }
    ]
  }
}).limit(1)

MongoPlayground

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...