mongodb Mongo DB更新问题错误代码28,“无法创建字段”

wfauudbj  于 2023-10-16  发布在  Go
关注(0)|答案(1)|浏览(256)

`我试图更新mongoDB集合中的动态字段,但它给出错误,但得到错误“无法在元素{newDataList:[ { link:“/products/deepak-test”,price:123.45,普里德:“123456789”,产品类型:“室内”,数量:1.0,运输:“true”,标题:“迪帕克测试”} ]}",详细信息={ }}]。at com.mongodb.connection.BulkWriteBatchCombiner.getError(BulkWriteBatchCombiner.java:176)“
code:Document findQuery = new Document(“siteId”,siteId).append(“prid”,prid);
LinkedTreeMap<String,Object> newDatamap =(LinkedTreeMap)productList.get(“new_data”);

for (Map.Entry<String, Object> entry : newDatamap.entrySet()) {
                activityDocument.put("newDataList."+entry.getKey(),entry.getValue());
            }

            update = new Document("$set", activityDocument);

            UpdateOneModel<Document> updateOneModel = new UpdateOneModel<>(findQuery, update);

            mongoBatcher.insert((Integer.parseInt(clientId)), cmapDetails[0], "productCatalouge", cmapDetails[2], updateOneModel, this.requestId);

code:“LinkedTreeMap<String,Object> newDatamap =(LinkedTreeMap)productList.get(“new_data”);

db.productCatalouge.find({"prid":"123456789"})
[
  {
    _id: ObjectId("651fb0e0cfee1daa261083db"),
    prid: '123456789',
    siteId: '910fb5db4172feb74e36d111285fa8cb',
    newDataList: [
      {
        link: '/products/deepak-test',
        price: 123.45,
        prid: '123456789',
        product_type: 'Indoor',
        quantity: 1,
        shipping: 'true',
        title: 'Deepak Test'
      }
    ]
  }
]

data ::
    at java.lang.Thread.run(Thread.java:750)
2023-10-06 13:27:40,397 ERROR MongoTaskManagerPoolThread-1 MongoDao:236 - Failed record Index: 0, Record: UpdateOneModel{filter=Document{{siteId=910fb5db4172feb74e36d111285fa8cb, prid=123456789}}, update=Document{{$set=Document{{newDataList.price=123.45, newDataList.prid=123456789, newDataList.quantity=13.0, newDataList.shipping=false, newDataList.title=Test After g  Incremental}}}}, options=UpdateOptions{upsert=false, bypassDocumentValidation=null, collation=null, arrayFilters=null}} Retrying ...
twh00eeo

twh00eeo1#

MongoDB中的错误代码28,特别是“无法创建字段”错误,通常发生在您尝试向集合中的文档添加新字段时,但文档的结构不允许创建该字段。发生此错误可能有以下几个原因:
1.架构不匹配:您尝试添加的字段可能与文档的现有架构不兼容。例如,您可能试图将字符串添加到最初包含数值的字段中。
1.严格架构模式:MongoDB的默认行为是灵活使用模式,但如果您使用的是“严格”模式(这不是默认模式),则无法添加模式中未显式定义的字段。
1.文档大小限制:MongoDB的最大文档大小限制为16MB。如果添加新字段会超过此限制,则会出现错误。
要解决此问题,您可以考虑以下步骤:
1.检查现有架构:确保文档的现有架构允许添加新字段。如有必要,请修改架构以容纳新字段。
1.更新现有文档:如果要将字段添加到现有文档中,可能需要遍历集合并单独更新每个文档。这可以使用$set操作符来更新特定字段。下面是一个MongoDB shell的例子:

db.collection.updateMany({}, { $set: { newField: "someValue" } })

collection替换为您的实际集合名称,将newField替换为您要添加的字段的名称,将"someValue"替换为您要为新字段设置的值。
1.使用$unset:如果你想删除一个字段,你可以使用$unset操作符。举例来说:

db.collection.updateMany({}, { $unset: { unwantedField: 1 } })

这将从集合中的所有文档中删除unwantedField
1.考虑使用迁移:对于更复杂的模式更改,请考虑使用迁移框架或脚本来管理对数据模型的更改。这有助于确保模式更新期间的数据一致性。
请记住在进行重大架构更改之前备份数据,以避免数据丢失。

相关问题