mongodb中$where查询功能非常强大,不过效率低,这里介绍一下$where的使用方法
db.getCollection('rest.modules.entity.TestCase').find({$where: function () { var result=true; var selectTarger='ffffe10183c3e1ff'; var temp = this.fingerCode; var different = 0; for(var i=0;i<16;i++){ if (selectTarger.charAt(i)!=temp.charAt(i)){ different++; } } if (different==0){ result = true; }else if (different <= 5){ result = true; }else{ result=false; } return result; } }).limit(10);
用java mongo driver调用
BasicDBObject totalQuery=new BasicDBObject();
StringBuilder sb=new StringBuilder();
sb.append("function () { var result=true;");
sb.append("var selectTarger='"+fingerCode+"';");
sb.append("var temp = this."+whereT.getFingerCodeField()+";");
sb.append("var different = 0;");
sb.append("for(var i=0;i<16;i++){");
sb.append("if (selectTarger.charAt(i)!=temp.charAt(i)){");
sb.append("different++;");
sb.append("}");
sb.append("}");
sb.append("if (different==0){");
sb.append("result = true;");
sb.append("}else if (different <= 5){");
sb.append("result = true;");
sb.append("}else{");
sb.append("result=false;");
sb.append("}return result;}");
totalQuery.append(QueryOperators.WHERE, sb.toString());
FindIterable<Document> fiList = collection.find(totalQuery).limit(10);