java - 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 字段名称
如果我首先从有效负载中删除,它会在最后一个对象上,依此类推。
解决方案
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 } ] }"));
推荐阅读
- javascript - 如何从 Select2 多选中传递 URL 字符串中的多个参数
- c++ - QT C++,从子层次结构调用 main 中的函数
- excel - Excel中的嵌套If函数
- html - 将网页转换为 PDF 并将其保存在特定文件夹中
- apache-spark - 在整周的一周开始日期(星期一)汇总
- java - 从给定的字符串中获取所有可能的回文
- jquery - 为什么内联元素在html中占用更多宽度
- ios - UIResponder doesNotRecognizeSelector:应用程序因此错误而崩溃
- c++ - 声明类变量后调用构造函数
- sql - 选择表中仅 17000 行的查询超时