java mongodb 增加字段长度_java – 在MongoDB文档中向对象添加新字段

我在MongoDB中有一个包含数千个文档的集合.

每个文档目前都是这样的:

{

"_id" : ObjectId("1"),

"FIELD1" : {

"STR1" : "some text",

"STR2" : "some text",

"STR3" : "some text",

"STR4" : "some text"

},

"FIELD2" : "some text"

}

使用以下代码段,我设法为ALL 4000文档添加一个新字段:

// Add new field to all documents

BasicDBObject query = new BasicDBObject();

BasicDBObject update = new BasicDBObject();

update.put("$set", new BasicDBObject(NEW_DB_FIELD_NAME, new BasicDBObject()));

WriteResult result = coll.update(query, update, true, true);

这些文档有一个新结构,其中FIELD3是一个Object:

{

"_id" : ObjectId("1"),

"FIELD1" : {

"STR1" : "some text",

"STR2" : "some text",

"STR3" : "some text",

"STR4" : "some text"

},

"FIELD2" : "some text",

"FIELD3" : {

}

}

现在,问题是我希望向FIELD3添加多个项目,其中每个项目都是一个包含2个字符串的对象:

{

"_id" : ObjectId("1"),

"FIELD1" : {

"STR1" : "some text",

"STR2" : "some text",

"STR3" : "some text",

"STR4" : "some text"

},

"FIELD2" : "some text",

"FIELD3" : {

"ITEM1" : {

"STR1" : "",

"STR2" : ""

},

"ITEM2" : {

"STR1" : "",

"STR2" : ""

},

"ITEM3" : {

"STR1" : "",

"STR2" : ""

}

}

}

我试过的是这个:

BasicDBObject query = new BasicDBObject{"FIELD2","some text"};

BasicDBObject update = new BasicDBObject();

update.put("$set", new BasicDBObject("FIELD3.ITEM1.STR1", "some text").append("FIELD3.ITEM1.STR2", "some text");

result = coll.update(query, update, true, false);

问题是我只能在FIELD3下获得一个新项目.当我遍历项目时,它会不断被新值替换.

请帮忙!

更新:

在@Explosion Pills的帮助下,我设法将所有ITEM1,ITEM2,ITEM3等添加到我新创建的FIELD3中.但是,我现在有另一个问题,我有’重复’项,其中值字段是相同的.我不希望这样.

删除重复项的优雅方法是什么?或者,更好的是,只插入非重复的优雅方式是什么?

我之前对重复的问题不太清楚.事实是,不同的项目必须具有不同的名称,例如ITEM1,ITEM2等;否则,他们互相取代.我想比较的是他们的价值观.

如果我将数据存储在不同的结构中会更好/更容易吗?我在想是否可能将FIELD3更改为ArrayList而不是Object.

目前,它类似于以下内容,我希望通过“WATERMELON”字段删除重复的水果.

FRUITS

> FRUIT1

> WATERMELON

> BIG

> FRUIT2

> WaTeRMeLON

> BIG

> FRUIT3

> APPLE

> SMALL

请帮忙!

最佳答案

This post说要为要创建的每个对象使用单独的BasicDBObject.它很冗长,但我还没有找到另一种方法.

BasicDBObject item1 = new BasicDBObject("STR1", "text").append("STR2", "txt");

// also for item2 and item3...

BasicDBObject field3 = new BasicDBObject("ITEM1", item1).append("ITEM2", item2);

update.put("$set", new BasicDBObject("FIELD3", field3));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值