仅在java中返回指定的字段和_id字段

问题描述

更新:Spuggiehawk在他的回答中建议解决include关键字问题,并提出一种替代_id的{​​{1}}替代方法。但是,我仍然很难从服务类中调用方法来编辑用户详细信息,我必须承认我掌握的知识有限,无法正确使用它。

projections

在服务类中

@Override
public User get(Object userId) {

    FindIterable<User> userTbl = database.getCollection("User",User.class).find();

User user = new User();

for (User doc : userTbl) {
    
    String oid = doc.getId().toHexString();

    System.out.println("_id = " + oid); 
        
        return user;
    }

    return null;
}

解决方法

如果只需要对象ID,则不需要使用投影。您想要(循环)获取的语法是:

    FindIterable<Document> userTbl = db.getCollection("User").find();
    for (Document doc: userTbl2)
    {
        String id = doc.getObjectId("_id").toString();
        System.out.println("_id = " + id);
    }

使用该ID值执行所需的操作。

就使用include而言,如果确实找到了需要的情况,则需要静态导入。如果将鼠标悬停在关键字上,则Eclipse应该为您提供选择:

Static import in Eclipse

如果Eclipse没有显示出来,则可能需要在Eclipse配置中的窗口->首选项-> Java->编辑器-> Content Assist->收藏夹下添加引用:

Eclipse static import packages

重要的部分在代码的顶部,应该包括:

import static com.mongodb.client.model.Projections.include;

您也会发现它对过滤器也很有用,例如。

Bson filter = eq("email","email.com");
db.getCollection("User").find(filter);

最后,如果您只想在find()中获得第一条匹配记录,请使用:

Document = db.getCollection("User").find(filter).first();

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...