如何在mongodb和Java中使用$和两个文件?

时间:2015-08-13 08:10:07

标签: java mongodb mongodb-query

我正在使用mongodb和Java 3.0驱动程序。我有一个场景,我必须对我的查询执行逻辑,即$and。例如,我已经创建了两个文档,我正在尝试这样做:

iterable = mongoDatabase.getCollection("restaurants").find(
                                              new Document("$and", asList(abc,
                                                     updatedDocumentTypeOne)));

其中abc是一个文档,updatedDocumentTypeOne是另一个文档。我在mongodb手册中发现了这个,但是我在第一次创建asList方法时遇到了错误。

或者如何在Java中复制以下内容:

db.inventory.find( {
    $and : [
        { $or : [ { price : 0.99 }, { price : 1.99 } ] },
        { $or : [ { sale : true }, { qty : { $lt : 20 } } ] }
    ]
} )`

2 个答案:

答案 0 :(得分:7)

您还可以尝试下面的代码,为Java中的查询复制添加过滤器:

// Where db is the object reference of "inventory" collection's database
 MongoCollection<Document> inventory = db.getCollection("inventory");

//List for result return
 List<Document> result = new ArrayList<Document>();

//Query replication in Java and return result into the list
 inventory.find(Filters.and(
            Filters.or(Filters.eq("price", 0.99),Filters.eq("price", "1.99")),
            Filters.or(Filters.eq("sale", true),Filters.lt("qty", 20))
            )).into(result);

答案 1 :(得分:3)

从asList()更改为 Arrays.asList()

您没有编写Arrays.asList(),而是指定为asList()。因此编译器正在搜索asList()方法,该方法不可用。

检查以下代码:

iterable = mongoDatabase.getCollection("restaurants").find(
                                                new Document("$and", Arrays.asList(abc,
                                                        updatedDocumentTypeOne)));

对于您的上述查询,您可以按以下代码进行编码:

/* First OR condition */
Document price1 = new BasicDBObject("price",0.99);
Document price2 = new BasicDBObject("price",1.99);

BasicDBList or_first = new BasicDBList();
or_first.add(price1);
or_first.add(price2);
DBObject query = new BasicDBObject("$or", or_first);

/* Second OR condition */
boolean val = true;
Document sale = new BasicDBObject("sale",val);
Document qty = new BasicDBObject("qty", new BasicDocument("$lt",20));

BasicDBList or_second = new BasicDBList();
or_second.add(sale);
or_second.add(qty);
DBObject query = new BasicDBObject("$or", or_second);

/* AND condition logic */
BasicDBList and_op = new BasicDBList();
and_op.add(or_first);
and_op.add(or_second);

iterable = mongoDatabase.getCollection("restaurants").find( new Document("$and", and_op ));