Как подсчитать количество документов, в которых элемент объекта внутри массива существует в коллекции Mongodb

У меня есть MongoDBcollection под названием Cards, содержащий структурно похожие документы, как показано ниже:

{
"_id" : ObjectId("mongoid"),
"userName": "Har109",
"array1" : [
    {
        "id" : "11",
        "name" : "hello world",            
    }
    {
        "id" : "21",
        "name" : "bye world",            
    }
],
 "array2" : [
    {
        "id" : "1",
        "name" : "titanic",            
    }
    {
        "id" : "2",
        "name" : "avatar",            
    }
],
 "array3" : [
    {
        "id" : "1",
        "name" : "The Alchemist",            
    }
    {
        "id" : "2",
        "name" : "What is Zero",            
    }
]
}     

Мне нужно запросить: подсчитать количество документов в коллекции, которые соответствуют «array1.id», что я затем могу сделать для всех других массивов (например, «array2.id», «array3.id»)

Каков синтаксис такого запроса в MongoDB Compass?

Я пробовал: конвейер, чтобы получить все документы, где есть массив1

 [{$count: 'array1'}]

Но как мне добавить условие where array1.id = "11" в этот конвейер на компасе mongodb, где этапы выполняются отдельно.

Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
0
2 639
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Подсчитайте количество документов в коллекции, соответствующих «array1.id».

Чтобы узнать, сколько документов содержит array.id=x, вы можете запустить:

db.collection.find({ "array1.id":"11" }).countDocuments()

Или с помощью агрегации

db.collection.aggregate([
{ $match:{"array1.id":"11"} }, 
{ count:"array1" }
])

Алгоритм автоматически обходит массивы.

Он не найдет документ, если ключ не существует.

Другие вопросы по теме