当前位置: 首页 > 知识库问答 >
问题:

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

赵昊阳
2023-03-14

我想检索以下信息:

从数据库中选择名称,地址如“colombo”和年龄

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

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

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

共有2个答案

昌正奇
2023-03-14

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

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

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);
宋飞舟
2023-03-14

试试这个

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);
    }
 类似资料:
  • 问题内容: 我正在尝试在Dropwizard上使用MYSQL JDBI进行IN查询(我认为不相关)。 如这里的建议,我还用 但是,当我启动应用程序时,出现以下错误: 有谁对解决这个问题有个好主意? 问题答案: 有两种方法可以实现它。 1 。使用 该注释期望StringTemplate中具有SQL语句的组文件 说我有这个文件PersonExternalizedSqlDAO 由于我们正在使用,因此必须

  • 问题内容: 我有和数组两个值,我想在选择查询中将它与sql IN运算符一起使用。 这是我桌子的结构 我有两个值的数组 我想获取comp_id 1和comp_id 2的记录。因此,我编写了以下查询。 但是它不会返回结果。 问题答案: 由于您拥有普通 整数 就可以做到… (由于不断出现,一些其他信息…) 如果使用 字符串 (特别是 不受信任的 )输入,可以做到 但不能处理NULL之类的值。并会添加引号

  • 我使用的是骆驼2.17.0。我需要在蓝图中的简单语言中使用in运算符。xml文件,如下所示

  • 我试图运行以下查询从SpringBoot仓库 但总是命中错误:绑定变量的数量无效。 请就如何进一步进行提出建议。 注:我确实遵循了Spring Crude的预测结果,即VentoryIds(列表 我想执行如下操作:

  • 问题内容: Java没有运算符重载的概念。 Still +运算符的行为与带数字的加法运算符和带字符串的串联运算符相同。这类似于操作员的重载行为。 那么,Java是否有运算符重载? 问题答案: Java语言会重载某些运算符吗? 是! 如您所知,运算符可以表示两种不同的含义,即字符串串联或数字加法。 根据定义 ,这是一个运算符重载。 以下是 所有 Java运算符的列表: [JLS 3.12运算符](h

  • 问题内容: 对于百万分之一的时间,我希望使用Java中的运算符,类似于SQL中的运算符。它可以作为编译器语法糖来实现。所以这 …真的很棒。实际上,以上内容与此处相当冗长的(且不适用于原始类型)构造相同: 或针对,和类似的类型: 也许会有更有效的实现。 题: 这样的东西会成为Java 8的一部分吗?如果没有,我该如何提出建议?还是我现在可以使用任何等效的构造? 问题答案: 使用op4j: 使用相同的