Java 使用MongoDB 3.4加载和保存用户数据
如何查找文档并在找到时检索它,而在一个命令中未找到时插入并检索它 我有一个关于我希望我的文档对于用户数据的格式的大纲。这是它的样子Java 使用MongoDB 3.4加载和保存用户数据,java,mongodb,asynchronous,Java,Mongodb,Asynchronous,如何查找文档并在找到时检索它,而在一个命令中未找到时插入并检索它 我有一个关于我希望我的文档对于用户数据的格式的大纲。这是它的样子 { "username": "HeyAwesomePeople", "uuid": "0f91ede5-54ed-495c-aa8c-d87bf405d2bb", "global": {}, "servers": {} } 当用户第一次登录时,我想存储数据的前两个值(username和uuid)并创建那些空值(全局值和服务器。这些全局值和服务器稍后
{
"username": "HeyAwesomePeople",
"uuid": "0f91ede5-54ed-495c-aa8c-d87bf405d2bb",
"global": {},
"servers": {}
}
当用户第一次登录时,我想存储数据的前两个值(username和uuid)并创建那些空值(全局值和服务器。这些全局值和服务器稍后都会有更多信息填充到其中,但现在它们可以为空)。但我也不想覆盖用户已经存在的任何数据
我通常会使用insertOne或updateOne调用集合,然后使用upsert(new UpdateOptions().upsert(true))选项插入(如果找不到),但在这种情况下,我还需要检索用户的文档
因此,在数据库中找不到用户的情况下,我需要将概述的数据插入数据库并返回保存的文档。在数据库中找到用户的情况下,我只需要从数据库返回文档
我该怎么做呢?我使用的是最新版本的Mongo,它已经弃用了旧的BasicDBObject类型,因此我在网上找不到很多使用新“Document”类型的地方。此外,我正在使用java的异步驱动程序,并希望将调用量保持在最低限度
如何查找文档并在找到时检索它,而在一个命令中未找到时插入并检索它
您可以使用方法查找和更新/upsert
MongoDB Java驱动程序公开了相同的方法名。例如:
// Example callback method for Async
SingleResultCallback<Document> printDocument = new SingleResultCallback<Document>() {
@Override
public void onResult(final Document document, final Throwable t) {
System.out.println(document.toJson());
}
};
Document userdata = new Document("username","HeyAwesomePeople")
.append("uuid", "0f91ede5")
.append("global", new Document())
.append("servers", new Document());
collection.findOneAndUpdate(userdata,
new Document("$set", userdata),
new FindOneAndUpdateOptions()
.upsert(true)
.returnDocument(ReturnDocument.AFTER),
printDocument);
//异步的回调方法示例
SingleResultCallback printDocument=新建SingleResultCallback(){
@凌驾
公开作废结果(最终文件、最终可丢弃文件){
System.out.println(document.toJson());
}
};
Document userdata=新文档(“用户名”、“HeyAwesomePeople”)
.附加(“uuid”、“0f91ede5”)
.append(“全局”,新文档())
.append(“服务器”,新文档());
collection.findOneAndUpdate(userdata,
新文档(“$set”,userdata),
新的FindOneAndUpdateOptions()
.upsert(正确)
.returnDocument(returnDocument.AFTER),
打印文件);
上面的查询将尝试查找与userdata
匹配的文档;如果找到,将其设置为与userdata
相同的值。如果未找到,则upsert
boolean标志将其插入集合。选项是在执行操作后返回文档
upsert和returnDocument标志是
有关教程/示例,请参见。以上代码段已使用当前版本的进行了测试。您的筛选条件是什么?在插入新记录之前,如何检查该记录?