以下是我的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")
;否则,它的某些部分有一个错误。 :)
包含和排除字段的规定是:
- 如果包含某些字段,则仅返回这些字段
- “_id”将隐式返回;
- 只允许排除“_id”;
- 如果排除一些普通字段,则会返回其他字段
- 不能包含其他字段;
关于java - 如何使用 MongoDB 中的 Criteria 进行投影?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26394533/