【发布时间】:2015-08-01 08:25:02
【问题描述】:
我有以下收藏:
User {
firstname,
lastname
}
我想按名字和/或姓氏(名字/姓氏/名字+姓氏)搜索用户。
我有什么:
Criteria criteria = new Criteria();
criteria.orOperator(Criteria.where("firstname").regex(searchQuery),Criteria.where("lastname").regex(searchQuery));
上面的问题是我可以按名字或姓氏搜索,但不能同时搜索(例如,“John Smith”是不可能的,而“John”或“Smith”是可能的。 这是因为 orOperator 而发生的,我看不到任何 andOr 或类似的东西。
例如如果我的数据库中有“John Smith”,我可以通过查询“John”、“Smith”、“John Smith”来找到他(就像在 facebook 中一样)
编辑:
String queryx[] = searchQuery.split(" ");
for(String q : queryx) {
criteria.orOperator(Criteria.where("firstname").regex(searchQuery),Criteria.where("lastname").regex(q));
}
显示结果,但它在我的控制台中给出以下错误:
Due to limitations of the com.mongodb.BasicDBObject, you can't add a second '$or' expression specified as '$or : [ { "firstname" : { "$regex" : "john smith"}} , { "lastname" : { "$regex" : "smith"}}]'. Criteria already contains '$or : [ { "firstname" : { "$regex" : "john smith"}} , { "lastname" : { "$regex" : "john"}}]'.
编辑2:
String queryx[] = searchQuery.split(" ");
ArrayList<Criteria> orOperators = new ArrayList<Criteria>();
for(String q : queryx) {
Criteria criteria = new Criteria();
criteria.orOperator(Criteria.where("firstname").regex(searchQuery),Criteria.where("lastname").regex(q));
orOperators.add(criteria);
}
Criteria [] orArray = orOperators.toArray(new Criteria[orOperators.size()]);
Criteria c = Criteria.where("firstname").regex(searchQuery);
c.orOperator(orArray);
Query query = new Query(c).limit(limit);
return mongoOperations.find(query, User.class);
编辑 3:
String queryx[] = searchQuery.split(" ");
ArrayList<Criteria> cr = new ArrayList<Criteria>();
for (String q : queryx) {
Criteria criteria = new Criteria();
criteria.orOperator(Criteria.where("firstname").regex(q),
Criteria.where("lastname").regex(q));
cr.add(criteria);
}
Query query = new Query();
for (Criteria cri : cr) {
query.addCriteria(cri); //this is the problem
}
return mongoOperations.find(query, User.class);
错误:
Due to limitations of the com.mongodb.BasicDBObject, you can't add a second 'null' criteria. Query already contains '{ "$or" : [ { "firstname" : { "$regex" : "john smith"}} , { "lastname" : { "$regex" : "john"}}]}'.
【问题讨论】:
标签: mongodb mongodb-query spring-data criteria-api database