-2

Я храню документы из автомобилей и хочу получить температуру всех автомобилей Mercedes как массив, как должен быть запрос в Mongodb?Как агрегировать значения в массиве объектов в MongoDB

{ "_id" : { "$oid" : "5880ff305d15f416c89457b7" }, 
    "car" : "mercedes", 
     "engine" : { 
      "sensor" : { 
         "temperatur" : "20", 
         "speed" : "100", 
         "hue" : "40" 
         } 
       }, 
     "motor" : { 
        "Power" : "155", 
        "Topspeed" : "400" 
        } 
} 

{ "_id" : { "$oid" : "5880ff305d15f416c89457b7" }, 
    "car" : "mercedes", 
     "engine" : { 
      "sensor" : { 
         "temperatur" : "50", 
         "speed" : "100", 
         "hue" : "40" 
         } 
       }, 
     "motor" : { 
        "Power" : "155", 
        "Topspeed" : "400" 
        } 
} 

Я хотел бы выбрать температуру для всех автомобилей Mercedes и получить ее. результат должен быть как [20,50]

EDIT: Мой код lookls как следующий IAM с помощью JAVA:

MongoClient mongoClient = new MongoClient(); 
     MongoDatabase database = mongoClient.getDatabase("test"); 
     MongoCollection<Document> coll = database.getCollection("myTestCollection"); 

ответ

1

Вы можете попробовать что-то подобное с обычным запросом, если вы хорошо с отчетливый значения.

db.cars.distinct("engine.sensor.temperatur", {"car" : "mercedes"}); 

Это даст вам

[ "20", "50" ] 

Update - Java эквивалент:

List<String> temps = coll.distinct("engine.sensor.temperatur", new Document("car", "mercedes"), String.class).into(new ArrayList<>()); 

Update - агрегация Опция

Bson match = new Document("$match", new Document("car", "mercedes")); 

Bson group = new Document("$group", new Document("_id", "$car").append("temps", new Document("$push", "$engine.sensor.temperatur"))); 

List<String> temps = (List<String>) coll.aggregate(Arrays.asList(match, group)).map(document -> document.get("temps")).first(); 
+0

это автомобили означает название коллекции? и как мне это сделать с моей тестовой базой данных и коллекцией myTestCollection? – nosqldbms

+0

да есть. Просто замените 'cars' на' myTestCollection' – Veeram

+0

и db? следует ли заменить его базой данных? Я получаю сообщение об ошибке. синтаксическая ошибка на томах (-ах), неуместная конструкция – nosqldbms