以下是我的Java控制器方法代码
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);
}
我的Db看起来像这样
"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。我怎么能这样做?
答案 0 :(得分:1)
将此语句添加到查询:
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")
; ELSE,它有一些错误。 :)
包括和排除字段的规定是:
答案 1 :(得分:1)
请看这里,它已被弃用,但可以帮助您理解
public DBCursor find(DBObject query,
DBObject fields,
int numToSkip,
int batchSize,
int options)
如果您不想要任何警告,可以使用DBCursor对象。
public DBCursor(DBCollection collection,
DBObject q,
DBObject k,
ReadPreference preference)
初始化新的数据库游标
参数: 集合 - 要使用的集合 q - 要执行的查询 k - 从查询返回的键 preference - 此查询的“读取首选项”
我不使用java驱动程序,但它不应该太困难。
答案 2 :(得分:0)
对于这个问题,你必须在你的pojo类中使用@JsonInclude(value=Include.NON_NULL)
,如下所示:
@JsonInclude(value=Include.NON_NULL)
String id;