Due to limitations of the com.mongodb.BasicDBObject, you can't add a second 'name' expression

最近尝试使用mongodb处理文档内容,在查询文档时遇到这个问题
场景: 用户在页面中输入查询关键字,分词后查询结果,查询条件是并的关系
问题原因: 使用Criteria criteria = new Criteria(); criteria .and(“name”).regex( keywords )时,由于keywords是分此后的list列表,我这里用了个for循环,当list大于1时,就会执行多次 criteria .and(“name”),这样是不允许的。因此报错
网上解决方法: 我去百度答案时,好多是使用Criteria.andOperator(Criteria.where(“name”).regex(keywords),Criteria.where(“name”).regex(keywords)),但是这里有个问题,他这里keywords的数量必须知道也就是分词后的list大小知道,而我的使用场景下是不知道用户输入多少个字符的,因此解决不了我的问题。
解决方案: 后来我使劲的百度,终于找到一篇能用的,其实这个问题还是由于对Criteria的不熟悉,看了一下andOperator的源码,发现,这个方法中是可以传入数组的,而数组的长度我们可以在分词后根据分词的结果集进行定以,于是我就把list处理后,放入数组中,然后传入andOperator中就可以了。
代码如下:

List<Criteria> list = new ArrayList<>();
Criteria[] conditionArray = {};
for(String keywords:partwords) {
	list .add(Criteria.where("name").regex(keywords));
}
//把无长度的数组实例出来,长度就位集合的个数
conditionArray = new Criteria[list .size()];
for(int i = 0 ; i < list.size() ; i++){
	//把集合中的条件对象全部存入数组中
	conditionArray[i] = list.get(i);
}
criteria.andOperator(conditionArray);
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页