使用Java向MongoDB文档中的列表添加元素
对于如何在现有mongodb文档中向数组添加元素,或者为什么我的结果没有正确显示,以及我期望的结果如何,我有点困惑 集合中只有一个文档,并且将永远只有一个文档。当我在命令行上的mongo会话中执行使用Java向MongoDB文档中的列表添加元素,java,mongodb,Java,Mongodb,对于如何在现有mongodb文档中向数组添加元素,或者为什么我的结果没有正确显示,以及我期望的结果如何,我有点困惑 集合中只有一个文档,并且将永远只有一个文档。当我在命令行上的mongo会话中执行db.collection name.find.pretty()命令时,mongo文档看起来像: { "_id" : ObjectID("1234567890"), "details" : { ... }, "calculations" : [
db.collection name.find.pretty()
命令时,mongo文档看起来像:
{
"_id" : ObjectID("1234567890"),
"details" : {
...
},
"calculations" : [
{
"count" : 1,
"total" : 10,
"mean" : 2.5
},
{
"count" : 2,
"total" : 20,
"mean" : 6.4
}
]
}
我想在计算
列表中添加另一个对象
我运行的Java代码基于以下示例:
//获取数据库和集合
MongoDatabase database=mongo.getDatabase(dataBaseName);
MongoCollection collection=database.getCollection(collectionName);
Document Document=collection.find().first();//将永远只有一个文档
//该对象以贴图的形式出现
Map incomingMap=newhashmap();
收入图。投入(“计数”,3);
收入图。投入(“总计”,4);
收入图。投入(“平均值”,7.9);
//转换成文件
Document newDocument=新文档();
收益图forEach((k,v)->{
新增文档。追加(k,v);
});
//将此附加到集合中-这是我感到困惑的地方
//对于本例,为了简单起见,只需对_id值进行硬编码
collection.updateOne(新文档(“_id”,“1234567890”),Updates.push(“计算”,新文档));
但是,当我在此之后的代码中执行System.out.println(collection.find().first())
或在mongo会话中执行db.collection name.find.pretty()
时,新文档尚未添加。没有抛出任何错误,完成得很好
我想知道的是
- 是行
collection.updateOne(newDocument(“_id”,“1234567890”),Updates.push(“calculations”,newDocument))代码>正确吗
- 是否已添加但未保存?如果是,如何保存李>
- 我是否可以在文档级别执行此操作,例如
或类似操作document.update(new Documen(Updates.push(“计算”,newDocument));
- 我还尝试了
,得到了相同的结果collection.findAndUpdateOne(新文档(“\u id”,“1234567890”)、Updates.push(“计算”,新文档));
- 我获取/硬编码文档ID的方式是否不正确
- 您有过滤条件问题(您的
\u id
是ObjectId
类型)
始终确保文档更新正确。查看代码片段:
UpdateResult result = collection.updateOne(filter, update);
log.info("Update with date Status : " + result.wasAcknowledged());
log.info("Nº of Record Modified : " + result.getModifiedCount());
因此,我添加了一种获取文档ID的方法,而不是硬编码,它可以工作?!我的ID值中有一个输入错误,或者删除了调试时使用的打印语句,都可以工作。如果有人能确认我所做的是正确的,那就好了,这样我就可以将其标记为已回答!
new Document("_id", ObjectId("1234567890"))`
UpdateResult result = collection.updateOne(filter, update);
log.info("Update with date Status : " + result.wasAcknowledged());
log.info("Nº of Record Modified : " + result.getModifiedCount());