首页 > 解决方案 > BSON 字段名称无效

问题描述

我查找了此问题的类似答案,但找不到任何答案。

public void update(String id, String user) {
    Document document = Document.parse(user);
    UpdateResult result = database.getCollection("user")
            .updateOne(Filters.eq("_id", new ObjectId(id)), document);

    System.out.println(result);
}

我的 JSON 有效负载看起来像这样。

{
    "first": "John",
    "last": "Doe",
    "email": "john@example.com",
}

错误

首先无效的 BSON 字段名称

如果我首先从有效负载中删除,它会在最后一个对象上,依此类推。

标签: javajsonmongodb

解决方案


updateOne(Filters.eq("_id", new ObjectId(id)), document);
这是由您的文档格式引起的
updateOne({here is condition }, {here is operation})

该文档中没有任何操作,因此导致了此错误。你应该这样写:

database.getCollection("user")
        .updateOne(Filters.eq("_id", new ObjectId(id)), combine(set( <field1>, <value1>), set(<field2>, <value2> ) ));

这是官方文档

在您的情况下,您可以尝试将 replaceOne() 与您的代码一起使用,例如

collection.replaceOne(eq("item", "paper"),
       Document.parse("{ item: 'paper', instock: [ { warehouse: 'A', qty: 60 }, { warehouse: 'B', qty: 40 } ] }"));

推荐阅读