Java/Groovy monogodb嵌套查询,带AND和OR
我很难将下面使用Java/Groovy monogodb嵌套查询,带AND和OR,java,mongodb,groovy,Java,Mongodb,Groovy,我很难将下面使用$和和$或的嵌套mongodb查询转换为java/groovy db.personSync.find({ $and:[ {$or:[ { "name" : { "$regex" : "(?i)^test1" , "$options" : "i"}}, { "name" : { "$regex" : "(?i)^dev" , "$options"
$和和$或的嵌套mongodb查询转换为java/groovy
db.personSync.find({
$and:[
{$or:[
{ "name" : { "$regex" : "(?i)^test1" , "$options" : "i"}},
{ "name" : { "$regex" : "(?i)^dev" , "$options" : "i"}}
]},
{ "email" : { "$regex" : "(?i)^test" , "$options" : "i"}}
]}
);
]}
);
我能够用$1或部分代码编写代码,如下所示
def mongoCritera = new ArrayList<BasicDBObject>();
mongoCritera.add('name', java.util.regex.Pattern.compile('(?i)^test1`'))
mongoCritera.add('name', java.util.regex.Pattern.compile('(?i)^dev`'))
def query = new BasicDBObject("\$or", mongoCritera);
collection.find(query);
def mongoCritera=newarraylist();
mongoCritera.add('name',java.util.regex.Pattern.compile('(?i)^test1`'))
mongoCritera.add('name',java.util.regex.Pattern.compile('(?i)^dev`'))
def query=新的BasicDBObject(\$or),mongoCritera;
收集、查找(查询);
但是我无法容纳$和逻辑,有人能帮我吗?据我所知,您想写一个查询获取
名称应以(test1或dev)开头,不区分大小写,电子邮件以test开头(也不区分大小写)?如果是,试试这个
db.personSync.find({$and:[{name:{“$regex:{test | dev]”,“$options:“i”}},{email:{“$regex:“^test1”,“$options:“i”}]})def and critera=newarraylist();
def orCritera1=新的ArrayList();
orCritera1.add('name',java.util.regex.Pattern.compile('(?i)^test1`'))
orCritera1.add('name',java.util.regex.Pattern.compile('(?i)^dev`'))
def orQuery1=新的基本对象(\$or),或准则1;
andCritera.add(或query1)
def orCritera2=新的ArrayList();
orCritera1.add('email',java.util.regex.Pattern.compile('(?i)^test`'))
def或QUERY2=新的基本对象(\$or),或准则2;
andCritera.add(或query2)
def query=新的基本CDBO对象(“\$and”和CRITERA);
def cursor=collection.find(查询)
while(cursor.hasNext()){
println'person'+cursor.next();
}
公共静态void main(字符串[]args){
MongoClient c=新的MongoClient();
MongoDatabase db=c.getDatabase(“测试”);
MongoCollection collection=db.getCollection(“so3”);
ArrayList和Critera=新的ArrayList();
ArrayList orCritera1=新的ArrayList();
添加(新文档(“name”,java.util.regex.Pattern.compile((?i)^[test1|dev]”);
文件orQuery1=新文件(“$or”,或准则1);
添加(或查询1);
add(新文档(“email”,java.util.regex.Pattern.compile((?i)^test));
单据查询=新单据(“$and”,andCritera);
ArrayList docList=新的ArrayList();
collection.find(查询).into(单据列表);
用于(文档:docList){
系统输出打印项次(doc);
}
}
我验证了它是否正常工作:)
def andCritera = new ArrayList<BasicDBObject>();
def orCritera1= new ArrayList<BasicDBObject>();
orCritera1.add('name', java.util.regex.Pattern.compile('(?i)^test1`'))
orCritera1.add('name', java.util.regex.Pattern.compile('(?i)^dev`'))
def orQuery1 = new BasicDBObject("\$or", orCritera1);
andCritera.add(orQuery1)
def orCritera2= new ArrayList<BasicDBObject>();
orCritera1.add('email', java.util.regex.Pattern.compile('(?i)^test`'))
def orQuery2 = new BasicDBObject("\$or", orCritera2);
andCritera.add(orQuery2)
def query = new BasicDBObject("\$and", andCritera);
def cursor = collection.find(query)
while (cursor.hasNext()) {
println 'person '+ cursor.next();
}
public static void main(String[] args) {
MongoClient c = new MongoClient();
MongoDatabase db = c.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("so3");
ArrayList<Document> andCritera = new ArrayList<Document>();
ArrayList<Document> orCritera1= new ArrayList<Document>();
orCritera1.add(new Document("name", java.util.regex.Pattern.compile("(?i)^[test1|dev]")));
Document orQuery1 = new Document("$or", orCritera1);
andCritera.add(orQuery1);
andCritera.add(new Document("email", java.util.regex.Pattern.compile("(?i)^test")));
Document query = new Document("$and", andCritera);
ArrayList<Document> docList = new ArrayList<Document>();
collection.find(query).into(docList);
for(Document doc:docList){
System.out.println(doc);
}
}
I validated this is working fine :)