-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" 
        } 
} 

나는 모든 메르세데스 자동차의 온도를 선택하고 받고 싶습니다. 결과는 [20, 50]

편집과 같이해야한다 : 다음 스피 사용하여 자바와 같은 내 코드 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" ] 

업데이트를 제공합니다 - 자바 상당 :

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? 데이터베이스로 교체해야합니까? 오류가 발생했습니다. 토큰에 대한 구문 오류, 잘못 배치 된 contruct – nosqldbms