我有一個具有以下結構的數據庫:{ "_id" : ObjectId("5d54608122474f8d2927d898"), "NOMBRE_HOST" : "Base1", "IsContingenciaODA" : "false", "puerto" : "1532", "HostContigencia" : "Base2", "BASEDATOS" : [ { "SID" : "REPOS", "IsContingenciaBD" : "false", "host" : "Base3", "puerto" : "1111" }, { "SID" : "PRODM2", "IsContingenciaBD" : "false", "host" : "nb", "puerto" : "1111" }, { "SID" : "PRODM3", "IsContingenciaBD" : "true", "host" : "Base4", "puerto" : "999" } ]}{ "_id" : ObjectId("5d54608122474f8d2927d899"), "NOMBRE_HOST" : "172.0.0.1", "IsContingenciaODA" : "false", "puerto" : "1532", "HostContigencia" : "172.10.0.1", "BASEDATOS" : [ { "SID" : "Base6", "IsContingenciaBD" : "false", "host" : "172.7.0.1", "puerto" : "999" } ]}我需要更新嵌入文檔的IsContingenciaBD參數。在 mongo 中更改此值的查詢如下:db.PropertiesMQ.update({"NOMBRE_HOST" : "Base1", "BASEDATOS.SID" : "PRODM3"}, {$set: {"BASEDATOS.$.IsContingenciaBD" : "true"}})我嘗試使用以下代碼在 java 中復制此查詢: MongoClient client = new MongoClient("my_ip", "my_port"); MongoDatabase mongodb = client.getDatabase("prueba"); MongoCollection<Document> collection = mongodb.getCollection("PropertiesMQ"); BasicDBObject filter = new BasicDBObject(); filter.put("NOMBRE_HOST", host); filter.put("BASEDATOS.SID", sid); BasicDBObject data = new BasicDBObject(); data.put("BASEDATOS.$.IsContingenciaBD", state); BasicDBObject command = new BasicDBObject(); command.put("$set", data); System.out.println(filter + ", " + command); collection.updateOne(filter, data); client.close();執行時我收到以下錯誤:線程“main”中的異常 java.lang.IllegalArgumentException:無效的 BSON 字段名稱 BASEDATOS.$.IsContingenciaBD
1 回答

泛舟湖上清波郎朗
TA貢獻1818條經驗 獲得超3個贊
看起來您在 updateOne 方法中使用了數據。相反,它應該是命令BasicDBObject。就像下面這樣,
MongoCollection<Document> collection = mongodb.getCollection("PropertiesMQ");
BasicDBObject filter = new BasicDBObject();
filter.put("NOMBRE_HOST", host);
filter.put("BASEDATOS.SID", sid);
BasicDBObject data = new BasicDBObject();
data.put("BASEDATOS.$.IsContingenciaBD", state);
BasicDBObject command = new BasicDBObject();
command.put("$set", data);
System.out.println(filter + ", " + command);
collection.updateOne(filter, command); //Use Command instead of data
添加回答
舉報
0/150
提交
取消