Моей структуры документа выглядит следующим образом:счетчика для конкретного ключа в документах
{
"_id" : ObjectId("4f6b0f6aaa294de8ff476bf3"),
"BLOODGAS" : [{
"ABG_PH" : 0.0, //<< one
"XYZ" : 2.0,
"PQR" : 3.0
}]
}
{
"BLOODGAS" : [{
"ABG_PH" : 1.0, //<< two
"XYZ" : 2.0,
"PQR" : 3.0
}, {
"ABG_PH" : 0.0, //<< three
"XYZ" : 1.0,
"PQR" : 2.0
}, {
"ABG_PH" : 0.0, //<< four
"XYZ" : 5.0,
"PQR" : 6.0
}],
"_id" : ObjectId("4f6b0f11aa294de8ff476bf2")
}
Теперь на основе текущей структуры я полностью четыре экземпляров с ключом ABG_PH
Но с помощью следующего запроса Я получаю количество:
db.myCollection.find({ "BLOODGAS.ABG_PH" : 0 }).count();
Я должен получите счет , так как у меня есть 3 экземпляра ABG_PH
со значением .
Какой запрос мне нужен, чтобы получить счет 3 с вышеуказанными данными.
Обновление: Если это невозможно с помощью простого запроса, могу ли я использовать сокращение карты здесь?
Вы считаете документы не элементами массива внутри своих документов. Поместите элементы массива «BLOODGAS» в отдельную коллекцию и все в порядке. –
@ RemonvanVliet вы имеете в виду, что у вас есть два _collections_? А потом связать их вместе каким-то идентификатором, как реляционной базой данных? – pradeep
Да. Если вы хотите подсчитать встроенные элементы, у вас есть два варианта; 1) разделять коллекции и поддерживать одно- или двунаправленные отношения или 2) запрашивать все документы-кандидаты и делать вкладку встроенного элемента. Последнее не очень хорошо масштабируется из-за ограничений памяти, но может быть уместным, если у вас есть некоторые практические гарантии относительно размера установленного кандидата. –