Je suis en train de mettre à jour un seul document dans ma collection de MongoDB commeMongoDB MongoCollection: ne peut pas mettre à jour le terrain
JSONArray jsonArr = new JSONArray();
/*Some processing to add stuff to jsonArr*/
mongoCollection.updateOne(eq("key", _id),Updates.set("asd", jsonArr));
mais je reçois
org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class org.json.simple.JSONObject.
at org.bson.codecs.configuration.CodecCache.getOrThrow(CodecCache.java:46)
at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:63)
at org.bson.codecs.configuration.ChildCodecRegistry.get(ChildCodecRegistry.java:51)
at org.bson.codecs.IterableCodec.writeValue(IterableCodec.java:105)
at org.bson.codecs.IterableCodec.encode(IterableCodec.java:90)
at org.bson.codecs.IterableCodec.encode(IterableCodec.java:37)
at com.mongodb.client.model.BuildersHelper.encodeValue(BuildersHelper.java:35)
at com.mongodb.client.model.Updates$SimpleUpdate.toBsonDocument(Updates.java:442)
at com.mongodb.MongoCollectionImpl.toBsonDocument(MongoCollectionImpl.java:599)
at com.mongodb.MongoCollectionImpl.update(MongoCollectionImpl.java:542)
at com.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:381)
at com.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:376)
noter que, voici comment je l'avais créé à l'origine de la document en premier lieu
Document unprocessedMeta = new Document("key",_id);
JSONArray arr = new JSONArray();
/*some processing to add stuff to arr */
unprocessedMeta.append("asd", arr);
mongoCollection.insertOne(unprocessedMeta);
et cela a très bien fonctionné. Notez que la clé asd
a une valeur JSONArray
. En outre, je peux sélectionner le document par
Document d = mongoCollection.find(eq("key", _id)).first();
et il montre juste comme prévu
Document{{_id=5981e702324fb0b50d727fe7, key=2323, asd=[Document{{<some-key-value-pairs>}}]}}
et je peux obtenir le JSONArray
intérieur comme
JSONArray existingAsd = (JSONArray) d.get("asd");
et je peux itérer sur le existingAsd
et accéder aux objets.
Pourquoi ne puis-je pas mettre à jour? Fondamentalement, je veux remplacer la valeur de la clé asd
dans le document qui correspond key
. J'ai même essayé
mongoCollection.updateOne(eq("key", _id),Updates.unset("asd"));
mongoCollection.updateOne(eq("key", _id),Updates.set("asd", jsonArr));
mais je reçois la même erreur
merci, cela a fonctionné! – AbtPst