-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]

EDITようにする必要があり、次のIAM使用してJavaのような マイコードlookls:

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

はいそうです。単に 'cars'を' myTestCollection' – Veeram

+0

とdbに置き換えてください。それをデータベースで置き換えるべきですか?私はエラーが発生します。 toke(s)の構文エラー、置き換えられたcontruct – nosqldbms

関連する問題