2010-11-01 154 views

回答

14

当我有确切的问题,我无法忽视的情况下进行查询。我最终复制了我想要搜索的值,使其正常化。在这种情况下,您可以创建一个新的属性并将其转换为小写字母并且具有一个索引。

编辑:

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

不知是否可行?

+0

这是1.4版本的方式。也许事情现在已经改变了。 – 2010-11-01 13:41:21

+1

使用控制台,我意识到输入db.collection.find({“prop”:/ value/i})会使我的查询大小写不敏感。必须有一种方法来使用Java驱动程序启用“我”属性,即使通过正则表达式查询它并不重要。键入DBObject query = new BasicDBObject(“prop”,“/”+ value +“/ i”)不起作用。 – Mark 2010-11-01 13:44:42

+0

试试看。我希望它能找到你想要的。 – 2010-11-01 13:52:38

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()")); 
-1
mapValue = new HashMap<String, Object>(); 
mapValue.put("$options", "i"); 
mapValue.put("$regex", "smth"); 
searchMap.put("name", mapValue); 
collection.find(new BasicDBObject(searchMap)); 
3

万一如果你使用下面提到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);  
    } 
0

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

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

“key”和“value”字段需要用您自己的数据进行更改。 (我还建议你使用$ regex参数进行搜索,以便通过部分匹配检索信息,如果数据库中有更多记录)。