![](/img/trans.png)
[英]How can I access an object array located inside of another object which is then inside a superclass array?
[英]How to update an object inside an array, inside another array in Spring + Mongo
我有一個 Spring + MongoDB 項目。 我有一個關於建築物的 Collections(“centros”。由 _id 標識),它有內部設備(“dispositivos”。由 uid 標識)有內部傳感器(“傳感器”由“變量”標識)。 我正在嘗試更新 1 個傳感器。
這就是我想在 mongoDB 中實現的目標:
db.collection.update({
"uid": "e898b585-d855-4017-9fe4-0644360f9d1b"
},
{
"$set": {
"dispositivos.$[dispositivo].sensores.$[sensor]": {
"variable": "Plutonio",
"unidad": "yuyuyuyuuyu"
}
}
},
{
"multi": false,
"upsert": false,
arrayFilters: [
{
"dispositivo.uid": "e898b585-d855-4017-9fe4-064386kkkkkk",
},
{
"sensor.variable": "caudal"
}
]
})
我試圖將其調整為 Spring,但沒有成功。 它總是給我某種錯誤。 這是我到目前為止所擁有的,但它不起作用。
public UpdateResult upsertSensor(String idCentro, String idDispositivo, String varSensor, JsonNode sensorBody) {
ObjectId objectId = new ObjectId(idCentro);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(objectId));
Update update = new Update();
update.filterArray(new Criteria("dispositivo.uid").is(idDispositivo).and("sensor.variable").is(varSensor));
update.set("dispositivos.$[dispositivo].sensores.$[sensor]", sensorBody);
return mongoTemplate.updateFirst(query, update, "centros");
}
這是一個示例文檔:
[
{
"uid": "e898b585-d855-4017-9fe4-0644360f9d1b",
"nombre": "Colegio Rio Piles",
"tipo": "Colegio",
"direccion": {
"calle": "Paseo Dr. Fleming, 1109",
"codigoPostal": "33204",
"municipio": "Gijon",
"provincia": "Asturias",
"ubicacion": {
"latitud": "43.5351406",
"longitud": "-5.6345379"
}
},
"horario": {
"apertura": "09:00",
"cierre": "22:00"
},
"dispositivos": [
{
"uid": "e898b585-d855-4017-9fe4-064386055555",
"descripcion": "",
"tipo": "ANALIZADOR_RED",
"adquisicion": "30s",
"sensores": [
{
"variable": "voltaje",
"unidad": "V"
},
{
"variable": "intensidad",
"unidad": "A"
}
]
},
{
"uid": "e898b585-d855-4017-9fe4-064386kkkkkk",
"descripcion": "",
"tipo": "CONTADOR_AGUA",
"adquisicion": "30s",
"sensores": [
{
"variable": "caudal",
"unidad": "l/s"
}
]
}
]
}
]
問題是如何獲取適用於 Java 的 mongoDB 查詢?
那是我的解決方案:
public UpdateResult upsertSensor(String idCentro, String idDispositivo, String varSensor, JsonNode sensorBody) {
ObjectId objectId = new ObjectId(idCentro);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(objectId));
Update update = new Update();
update.filterArray(new Criteria("dispositivo.uid").is(idDispositivo));
update.filterArray(new Criteria("sensor.variable").is(varSensor));
update.set("dispositivos.$[dispositivo].sensores.$[sensor]", sensorBody);
return mongoTemplate.updateFirst(query, update, "centros");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.