-2

我存储来自汽车的文档,并希望将所有梅赛德斯汽车的温度作为数组获取,查询应该如何在 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]

编辑:我的代码看起来像下面使用 JAVA 的 iam:

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

1 回答 1

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();
于 2017-01-19T18:51:16.027 回答