MongoDB和Java驱动程序:查询中的“忽略大小写”

时间:2010-11-01 13:37:45

标签: java mongodb case-insensitive

这是我现在使用的代码,如何添加“忽略大小写”属性?

DBObject query = new BasicDBObject("prop", value);

由于

5 个答案:

答案 0 :(得分:16)

当我遇到确切的问题时,我无法通过忽略大小写进行查询。我最终复制了我想要搜索的值,将其标准化。在这种情况下,您可以创建一个新属性并将其转换为小写,并在其上有一个索引。

修改

DBObject ref = new BasicDBObject();
ref.put("myfield", Pattern.compile(".*myValue.*" , Pattern.CASE_INSENSITIVE));
DBCursor cur = coll.find(ref); 

我想知道这是否有效?

答案 1 :(得分:5)

如果您使用的是Spring-java,则可以使用不区分大小写的方式进行搜索。

public List<Discussion> searchQuestionByText(String qText){
        Query query = new Query();
        query.addCriteria(Criteria.where("discussionName").regex(qText,"i"));
        return mongoTemplate.find(query, Discussion.class);     
    }

答案 2 :(得分:1)

我还试图充分利用“不区分大小写”的实现。 如果您使用的是MongoDB Java driver 3.0或更高版本,则应使用以下代码,并使用 $ option 参数!它真的很容易使用:

Document basicQuery = new Document();
basicQuery.append("key", new Document("$regex","value").append("$options","i")); 

需要使用您自己的数据更改字段“key”和“value”。

(我还建议您使用 $ regex 参数进行搜索,以便在数据库中有越来越多的记录的情况下通过部分匹配来检索信息。

答案 3 :(得分:0)

db.iolog.find({$where:"this.firstname.toLowerCase()==\"telMan\".toLowerCase()"});
DBObject ref = new BasicDBObject();
ref.append("firstname", new BasicDBObject("$where","this.firstname.toLowerCase()=="+firstname+".toLowerCase()"));

答案 4 :(得分:-1)

 mapValue = new HashMap<String, Object>();
 mapValue.put("$options", "i");
 mapValue.put("$regex", "smth");
 searchMap.put("name", mapValue);
 collection.find(new BasicDBObject(searchMap));