У меня есть MongoDB
collection
под названием 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, где этапы выполняются отдельно.
Подсчитайте количество документов в коллекции, соответствующих «array1.id».
Чтобы узнать, сколько документов содержит array.id=x
, вы можете запустить:
db.collection.find({ "array1.id":"11" }).countDocuments()
Или с помощью агрегации
db.collection.aggregate([
{ $match:{"array1.id":"11"} },
{ count:"array1" }
])
Алгоритм автоматически обходит массивы.
Он не найдет документ, если ключ не существует.