打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何使用Java在MongoDB中的嵌套数组中添加元素

大家好,我正在用Java开发mongodb,我有一个场景,如果外部文档匹配,那么我必须在嵌套数组中更新/添加计数,例如,我想做这样的事情:

`"_id" : ObjectId("55d71603aed7562284e5df95"),"id" : "1","type" : "a","score" : {        "mark1" : "1",        "mark2" : "2",        "count" : { "one","two"                        }}`

如果我再次发送具有相同字段的文档,例如id:1,请输入:a,mark1:1,mark2:2,那么我必须将我的文档作为

`"_id" : ObjectId("55d71603aed7562284e5df95"),"id" : "1","type" : "a","score" : {        "mark1" : "1",        "mark2" : "2",        "count" : { "one","two","three"                        }}`

但是我得到这样的东西:

`"_id" : ObjectId("55d71e42aed7560e8c9d02e4"),"id" : "1","type" : "a","score" : {        "mark1" : "1",        "mark2" : "2",        "count" : {                "count" : "one",        }}`

我的java代码是

 `mongoDatabase=mongoClient.getDatabase("TestNestedInsert");        Document sourceDocument=mongoDatabase.getCollection("entity").find(new Document("id",1).append("score.mark1", "1").append("score.mark2", "2")).first();        if(sourceDocument==null){            Document entity=new Document();            entity.append("id", "1");            entity.append("type", "a");            entity.append("score", new Document("mark1","1").append("mark2", "2").append("count", new Document("count","one")));            mongoDatabase.getCollection("entity").insertOne(entity);        }        else{            mongoDatabase.getCollection("entity").findOneAndUpdate(new Document("id",1).append("score.mark1", "1").append("score.mark2", "2"), new Document("$set",new Document("score.count","three")));        }        ` 

我知道我们不能有重复的键,我也尝试过$set和$push,但是我被卡住了.有什么帮助吗?

解决方法:

根据代码,主要问题在于“ count”键是一个对象而不是数组.因此正确的JSON表示为:

{    "_id": ObjectId("55d71603aed7562284e5df95"),    "id": "1",    "type": "a",    "score": {        "mark1": "1",        "mark2": "2",        "count": [            "one",            "two",            "three"        ]    }}

请注意“计数”键后面的方括号“ []”.

关于新的mongo java驱动程序(3.0),我有相同的问题.
这是我解决的方法:

MongoDatabase mongoDatabase = mongoClient.getDatabase("TestNestedInsert");MongoCollection<Document> entityCollection = mongoDatabase.getCollection("entity");Document queryDocument = new Document("id", 1).append("score.mark1", "1").append("score.mark2", "2");Document sourceDocument = entityCollection.find(queryDocument).first();if (sourceDocument == null) {    Document entity = new Document();    entity.append("id", "1");    entity.append("type", "a");    // Create the score nested object    String[] countArray = { "one", "two" }; // create the count array    Document scoreObject = new Document()            .append("mark1", "1")            .append("mark2", "2")            .append("count", countArray); // append the count array    entity.append("score", scoreObject); // append the score object.    entityCollection.insertOne(entity);}else{    // push the new element to the count array.    // see: https://docs.mongodb.org/v3.0/reference/operator/update/push/#append-a-value-to-an-array    Document elementToArray = new Document("score.count", "three");    Document pushElement = new Document("$push", elementToArray);    entityCollection.updateOne(queryDocument, pushElement);}

希望能帮助到你!

来源:https://www.icode9.com/content-2-566801.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Mongodb Mapreduce 初窥
MongoDB:将Json数据直接写入MongoDB的方法
【教程2】MongoDB学习笔记(二) —— 通过samus驱动实现基本数据操作
C#操作MongoDB入门
Python实现Word表格转成Excel表格的示例代码
What is the Document Object Model?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服