Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用MongoDB 3.4加载和保存用户数据_Java_Mongodb_Asynchronous - Fatal编程技术网

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标志是


有关教程/示例,请参见。以上代码段已使用当前版本的进行了测试。

您的筛选条件是什么?在插入新记录之前,如何检查该记录?