我正在开发一个用于监视锻炼的简单Spring应用程序。我正在使用一个小型MongoDB数据库来处理我的accountName / password / firstName / lastName(基本帐户信息)。我现在正在尝试处理登录,但是似乎无法弄清楚如何正确访问字段以进行简单的密码检查(数据托管在mlab.com中)。

{
"_id": {
    "$oid": "5bdc7952b1c6ac606802ca69"
},
"accountName": "testAccount",
"password": "hockey",
"firstName": "Test",
"lastName": "Tester"
}


创建/删除帐户信息不是问题。但是我似乎无法弄清楚如何提取accountName / password字段来检查用户输入的内容。我已经尝试过使用BasicDBObject并运行查询,但是它似乎从未返回任何东西。

编辑:
例如,我在其他线程中看到过这样的示例:

    BasicDBObject query = new BasicDBObject(accountName, "password");
    DBCursor cursor = db.find(query);


我basicDBObject中的accountName参数是用户输入的帐户名。我的理解似乎是错误的,当我为该查询分配光标时,我应该能够在mlab的文档中获取与该accountName关联的“密码”。由于db.find(query)上的返回类型不是DBCursor,因此出现编译错误。

这是我的数据库的声明/访问方式:

   private MongoCollection<Document> db;
   MongoClientURI uri  = new MongoClientURI(MONGO_URL);
   MongoClient mongoClient = new MongoClient(uri);
   db = mongoClient.getDatabase(uri.getDatabase()).getCollection(COLLECTION_NAME);

最佳答案

您可以将BasicDBObject想象为一个json,因此在制作时

new BasicDBObject(accountName, "password");

它代表这样的东西

{[accountName]: "password"}

accountName中的所有内容成为键,而"password"成为值。

您可能想要的是搜索accountName并将password字段用作投影。

MongoClientURI uri  = new MongoClientURI(MONGO_URL);
MongoClient mongoClient = new MongoClient(uri);
DBCollection db = mongoClient.getDB(uri.getDabase()).getCollection(COLLECTION_NAME);

BasicDBObject query = new BasicDBObject("accountName", accountName);
BasicDBObject projection = new BasicDBObject("password", 1);
DBCursor cursor = db.find(query, projection);


这是执行查询的旧方法,替代方法使用Bson而不是BasicDBObject

private MongoCollection<Document> db;
MongoClientURI uri  = new MongoClientURI(MONGO_URL);
MongoClient mongoClient = new MongoClient(uri);
db = mongoClient.getDatabase(uri.getDatabase()).getCollection(COLLECTION_NAME);

Bson query = Filters.eq("accountName", accountName)
Bson projection = Projections.include("password")
FindIterable<Document> iterator = db.find(query).projection(projection)


您遇到的问题是您在混合使用这两个选项。

10-07 12:00