java - 如何使用 MongoDB 中的 Criteria 进行投影?

标签 java spring mongodb mongodb-query database

以下是我的Java Controller 方法代码

public List<MyClass> getStudentList(String studentName){
        studentName = ".*" + studentName + ".*";

    /*  BasicDBObject field = new BasicDBObject();
        field.put("regNo", 1);
        field.put("name", 1);
        field.put("collName", 1);
        field.put("deptName", 1);  */

        Query query = new Query(Criteria.where("name").regex(studentName, "i"));            

        return mongoTemplate.find(query,MyClass.class, COLLECTION_NAME);

    }

我的数据库看起来像这样

"regNo" : "1234", "name" : "ABCD", "collName" : "UNIVERSITY COLLEGE", "deptName" : "B.E. Computer Science and Engineering", "result" : [ { "subjCode" : "CS2251", "grade" : "E", "result" : "PASS", "subjName" : "Design and Analysis of Algorithms" }]

我只想选择 regNo、name、collName 和 deptName。我怎样才能做到这一点?

最佳答案

将此语句添加到查询:

query.fields().include("regNo").include("name").include("collName").include("deptName").exclude("_id");
<小时/>

附加

如果您的代码如下:

public List<MyClass> getStudentList(String studentName){
    studentName = ".*" + studentName + ".*";

/*  BasicDBObject field = new BasicDBObject();
    field.put("regNo", 1);
    field.put("name", 1);
    field.put("collName", 1);
    field.put("deptName", 1);  */

    Query query = new Query(Criteria.where("name").regex(studentName, "i"));

    query.fields().include("regNo").include("name").include("collName").include("deptName").exclude("_id");

    return mongoTemplate.find(query,MyClass.class, COLLECTION_NAME);
}

应该没问题。

通过您提供的查询字符串:

var q = {
        Query : {
            "name" : {
                "$regex" : ".*valueSearched.*",
                "$options" : "i"
            }
        },
        Fields : {
            "collName" : 1,
            "results" : 0,          // disallowed
            "_id" : 0,
            "de‚Äå‚ÄãptName" : 1,
            "name" : 1,
            "regNo" : 1
        }
    };

您实际上执行了类似于

的操作
query.fields().include("collName").exclude("results").exclude("_id").include("de‚Äå‚ÄãptName").include("name").include("regNo");

相反。

请相应地检查您的代码。也许您在某个地方调用了 query.fields().exculude("results") ;否则,它的某些部分有一个错误。 :)

包含和排除字段的规定是:

  1. 如果包含某些字段,则仅返回这些字段
    • “_id”将隐式返回;
    • 只允许排除“_id”;
  2. 如果排除一些普通字段,则会返回其他字段
    • 不能包含其他字段;

关于java - 如何使用 MongoDB 中的 Criteria 进行投影?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26394533/

相关文章:

mongodb - 如何查询一个动态键——mongodb schema设计

java - 如何在 JPA 中设置默认架构

java - 如何在Java中设置Grpc连接最大限制?

spring - 启用 HiddenHttpMethodFilter 后使用 Spring MVC 3.0.2 上传多个文件

java - 在没有 IDE 的情况下构建 jar 时出现 "Unable to resolve persistence unit"错误

mongodb - Doctrine MongoDB delete 仅引用 onRemove

node.js - 当 Node 服务器重新启动时,如何存储/保留套接字连接

java - 如何使用 LWJGL 3 绘制形状

java - org.deeplearning4j.exception.DL4JInvalidInputException : Problem with creating array with data to predict

hibernate - AbstractTransactionalJUnit4SpringContextTests