Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java/Groovy monogodb嵌套查询,带AND和OR_Java_Mongodb_Groovy - Fatal编程技术网

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 :)