gpt4 book ai didi

java - MongoDB MongoCollection : Cannot update field

转载 作者:行者123 更新时间:2023-12-02 02:41:04 25 4
gpt4 key购买 nike

我正在尝试将 mongodb 集合中的单个文档更新为

JSONArray jsonArr = new JSONArray();

/*Some processing to add stuff to jsonArr*/

mongoCollection.updateOne(eq("key", _id),Updates.set("asd", jsonArr));

但我明白了

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)

请注意,这是我最初创建文档的方式

        Document unprocessedMeta = new Document("key",_id);

JSONArray arr = new JSONArray();
/*some processing to add stuff to arr */

unprocessedMeta.append("asd", arr);
mongoCollection.insertOne(unprocessedMeta);

这工作得很好。请注意,asd 键的值是 JSONArray。另外,我可以通过

选择文档

文档 d = mongoCollection.find(eq("key", _id)).first();

它的显示正如预期

Document{{_id=5981e702324fb0b50d727fe7, key=2323, asd=[Document{{<some-key-value-pairs>}}]}}

我可以得到内部JSONArray作为

JSONArray existingAsd = (JSONArray) d.get("asd");

我可以迭代 existingAsd 并访问对象。

为什么我不能更新?基本上,我想替换文档中与 key 匹配的键 asd 的值。我什至尝试过

mongoCollection.updateOne(eq("key", _id),Updates.unset("asd"));
mongoCollection.updateOne(eq("key", _id),Updates.set("asd", jsonArr));

但我遇到了同样的错误

最佳答案

由于 MongoDB 使用 BSON 进行操作,我相信这是因为没有 JSONObject 到 BSON 序列化器。

尝试使用List<Document>相反:

// id of the document
Document id = new Document("key", 1);

// array of documents
List<Document> docArray = Arrays.asList(
new Document("key1", "val1"),
new Document("key2", "val2"));

// insert the new document
Document doc = new Document("key", 1).append("docarray", docArray);
collection.insertOne(doc);
System.out.println("Before: " + collection.find(id).first().toJson());

// new array of documents
List<Document> docArrayUpdated = Arrays.asList(
new Document("key3", "val3"),
new Document("key4", "val4"));

// update the document with the new array
collection.updateOne(id, Updates.set("docarray", docArrayUpdated));
System.out.println("After: " + collection.find(id).first().toJson());

上面的代码打印出来:

Before: { "_id" : { "$oid" : "5982cf6f11e67733e5efcea6" }, "key" : 1, "docarray" : [{ "key1" : "val1" }, { "key2" : "val2" }] }
After: { "_id" : { "$oid" : "5982cf6f11e67733e5efcea6" }, "key" : 1, "docarray" : [{ "key3" : "val3" }, { "key4" : "val4" }] }

这表明docarray字段已成功更新。

关于java - MongoDB MongoCollection : Cannot update field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45464147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com