如何在mongodb中使用$ in运算符和java中的两个字段

时间:2016-05-20 11:54:54

标签: java mongodb

我想检索以下信息:

从数据库中选择名称,例如' colombo'和年龄> 20;

但是对于Java中的MongoDB。从本质上讲,它应该返回包含colombo ang age大于20的单词的所有名称。我知道MongoDB中有$ in运算符,但是如何使用Java驱动程序在Java中执行相同操作?我一直在努力寻找它,但一无所获。我试过了:

query = new BasicDBObject("names", new BasicDBObject("$in", "colombo"), new BasicDBObject("age", "$gt20"));

但它没有奏效:(请帮忙!

2 个答案:

答案 0 :(得分:1)

试试这个

BasicDBObject query = new BasicDBObject("names", new BasicDBObject("$in",      Arrays.asList("colombo")));
    query.append("age", new BasicDBObject("$gt", 20));
    FindIterable<Document> find = collection.find(query);
    MongoCursor<Document> iterator = find.iterator();
    Document doc = null;
    while (iterator.hasNext()) {
        doc = iterator.next();
        System.out.println(doc);
    }

答案 1 :(得分:0)

$in 运算符不适用于您只能使用它来匹配数组中的值或搜索字段值等于任何值的文档指定数组中的值。

在您的情况下,您需要 $regex 运算符才能通过执行SQL LIKE操作来完成查询:

db.collection.find({
    "names": { "$regex": /colombo/, "$options": "i" },
    "age": { "$gt": 20 }
})

db.collection.find({
    "names": /colombo/i },
    "age": { "$gt": 20 }
})

可以用Java实现

Pattern pattern = Pattern.compile("colombo", Pattern.CASE_INSENSITIVE);

BasicDBObject query = new BasicDBObject("names", pattern)        
    .append("$age", new BasicDBObject("$gt", 20));
DBCursor result = coll.find(query);

如果使用3.0.x及更新的驱动程序:

Document regx = new Document();
regx.append("$regex", "(?)" + Pattern.quote("colombo"));
regx.append("$options", "i");

Document query = new Document("names", regx).append("$age", new Document("$gt", 20));
FindIterable<Document> iterable = db.getCollection("coll").find(query);