Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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
用于和/或组合的Mongo Java查询_Java_Mongodb - Fatal编程技术网

用于和/或组合的Mongo Java查询

用于和/或组合的Mongo Java查询,java,mongodb,Java,Mongodb,我需要Java驱动程序mongo查询和/或组合- 例如— 假设我有一个集合,用户有3个名为a、b、c的字段 现在我必须执行如下的查找查询- user.find({$and :[{"a":"text"},{$or :[{"b":"text"},{"c":"text"}]}]}) 此mongo控制台查询提供正确的结果。 我如何将其应用于JAVA mongo驱动程序 请帮忙 提前感谢您可以使用以下查询 DBCollection userCollection = db.getCollection("c

我需要Java驱动程序mongo查询和/或组合- 例如—

假设我有一个集合,用户有3个名为a、b、c的字段

现在我必须执行如下的查找查询-

user.find({$and :[{"a":"text"},{$or :[{"b":"text"},{"c":"text"}]}]})
此mongo控制台查询提供正确的结果。 我如何将其应用于JAVA mongo驱动程序

请帮忙
提前感谢

您可以使用以下查询

DBCollection userCollection = db.getCollection("collection");

BasicDBObject orQuery = new BasicDBObject();
List<BasicDBObject> obj1 = new ArrayList<BasicDBObject>();
obj1.add(new BasicDBObject("a", "text"));
obj1.add(new BasicDBObject("b", "text"));
orQuery.put("$or", obj1);

BasicDBObject andQuery = new BasicDBObject();
List<BasicDBObject> obj = new ArrayList<BasicDBObject>();
obj.add(new BasicDBObject("c", "text"));
obj.add(orQuery);
andQuery.put("$and", obj);

System.out.println(andQuery.toString());

DBCursor cursor = userCollection.find(andQuery);
while (cursor.hasNext()) {
    System.out.println(cursor.next());
}

您可以使用以下查询

DBCollection userCollection = db.getCollection("collection");

BasicDBObject orQuery = new BasicDBObject();
List<BasicDBObject> obj1 = new ArrayList<BasicDBObject>();
obj1.add(new BasicDBObject("a", "text"));
obj1.add(new BasicDBObject("b", "text"));
orQuery.put("$or", obj1);

BasicDBObject andQuery = new BasicDBObject();
List<BasicDBObject> obj = new ArrayList<BasicDBObject>();
obj.add(new BasicDBObject("c", "text"));
obj.add(orQuery);
andQuery.put("$and", obj);

System.out.println(andQuery.toString());

DBCursor cursor = userCollection.find(andQuery);
while (cursor.hasNext()) {
    System.out.println(cursor.next());
}

我认为您不需要$and,因为当您的查询中有多个字段时,它们是$and,并且会自动进行ed。唯一需要$and的情况是,在同一字段上有多个条件,通常有不同的运算符。此外,您使用新的QueryBuilder API还是使用嵌套的DBObject和DBList的旧API?感谢Philipp的回复,我使用的是旧的DBObject API。你能告诉我这个查询吗?我认为你不需要$and,因为当你的查询中有多个字段时,它们是$and,并且会自动被赋值。唯一需要$and的情况是,在同一字段上有多个条件,通常有不同的运算符。此外,您使用新的QueryBuilder API还是使用嵌套的DBObject和DBList的旧API?感谢Philipp的回复,我使用的是旧的DBObject API。你能告诉我这个问题吗?谢谢尼利斯,真的很有帮助!谢谢Nilesh,真的很有帮助!