java mongodb 数组_如何使用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 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值