Я искал здесь, но не смог найти четкого ответа на следующий вопрос.В приведенном ниже примере коллекции mycollection
как выбрать отдельные vin
числа только в объектах, где существует поле status
и status
равно UNLOCKED
?
Я пытался
db.getCollection('mycollection').distinct("vin", {$and: [{"decoded_payload.status": {$exists: true}}, {"decoded_payload.status":"UNLOCKED"}]})
, но этот запрос зависает бесконечно
Из-за большого размера базы данных и длительной задержки такого запроса я хотел быограничьте вывод, чтобы проверить, работает ли он вообще, но кажется, что limit()
не вариант с .distinct()
. В MongoDB, как выбрать отдельные vin
в данных ниже, установить ограничение= 1 и выбирается только на основе условия status
(status
существует и равно "UNLOCKED")?
Будет ли aggregate()
правильным выбором?Как можно использовать вышеупомянутые условия с aggregate()
и limit()
?
Выходные данные в этом случае будут 34567
{
"_id" : ObjectId("1"),
"vin" : "12345",
"class_name" : "foo",
"decoded_payload" : {
"timestamp" : 1547329250,
"status" : "LOCKED"
}
}
{
"_id" : ObjectId("2"),
"vin" : "23456",
"class_name" : "foo",
"decoded_payload" : {
"timestamp" : 1547329260,
"status" : "LOCKED"
}
}
{
"_id" : ObjectId("3"),
"vin" : "34567",
"class_name" : "bar",
"decoded_payload" : {
"timestamp" : 1547329270,
"status" : "UNLOCKED",
"reservation_id" : "71"
}
}
{
"_id" : ObjectId("4"),
"vin" : "45678",
"class_name" : "baz",
"decoded_payload" : {
"timestamp" : 1547329280,
"reservation_id" : "71"
}
}