-2

我存儲汽車文檔並想要將所有梅賽德斯汽車的溫度作爲數組獲取,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" 
        } 
} 

我想選擇所有梅賽德斯車的溫度並接收它。 結果應該是像[20,50]

編輯: 我的代碼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" ] 

更新 - 相當於Java:

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

更新 - 聚合選項

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

是的。只需用'myTestCollection'替換'cars' – Veeram

+0

和db?我應該用數據庫來替換它嗎?我收到一個錯誤。 (s)上的語法錯誤,錯位的構造 – nosqldbms