使用 Java 查询 MongoDB 中数组元素的文档

2024-06-22

我是 MongoDB 新手。我的样本文档是

{
    "Notification" : [
        {
            "date_from" : ISODate("2013-07-08T18:30:00Z"),
            "date_too" : ISODate("2013-07-30T18:30:00Z"),
            "description" : "fdfd",
            "url" : "www.adf.com"
        },
        {
            "date_from" : ISODate("2013-07-01T18:30:00Z"),
            "date_too" : ISODate("2013-07-30T18:30:00Z"),
            "description" : "ddddddddddd",
            "url" : "www.pqr.com"
        }
    ],

我正在尝试更新通知"url" : "www.adf.com"。我执行此操作的 Java 代码是:

BasicDBObject query=new BasicDBObject("url","www.adf.com");

DBCursor f = con.coll.find(query);

它不搜索其文档"url" is "www.adf.com".


在本例中您有一个嵌套文档。您的文档有一个字段Notification这是一个存储多个带有字段的子对象的数组url。要在子字段中搜索,您需要使用点语法:

BasicDBObject query=new BasicDBObject("Notification.url","www.adf.com");

但是,这将返回整个文档以及整个文档Notification大批。您可能只需要子文档。要过滤此内容,您需要使用Collection.find 的两个参数版本 http://api.mongodb.org/java/current/.

BasicDBObject query=new BasicDBObject("Notification.url","www.example.com");
BasicDBObject fields=new BasicDBObject("Notification.$", 1);

DBCursor f = con.coll.find(query, fields);

The .$表示“仅该数组中与查找运算符匹配的第一个条目” http://docs.mongodb.org/manual/reference/projection/positional/#proj._S_

这仍然应该返回一个带有子数组的文档Notifications,但是这个数组应该只包含条目url == "www.example.com".

要使用 Java 遍历此文档,请执行以下操作:

BasicDBList notifications = (BasicDBList) f.next().get("Notification"); 
BasicDBObject notification = (BasicDBObject) notifications.get(0);
String url = notification.get("url");

顺便一提:当数据库增长时,您可能会遇到性能问题,除非您创建索引来加速此查询:

con.coll.ensureIndex(new BasicDBObject("Notification.url", 1));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Java 查询 MongoDB 中数组元素的文档 的相关文章

  • 创建 RESTful WebService 并通过 Glassfish 4 提供服务

    我在 JEE6 中看到了很多关于 RESTful WebServices 的问题 所以我想与您分享这个示例解决方案 它展示了实现 RESTful Webservice 是多么容易 首先创建一个新的动态 Web 项目并将 Glassfish
  • 有没有办法获取 JList 中的所有元素?

    我想知道是否有一种方法可以检索已添加到 JList 的所有元素的列表 例如 我希望 JList 从自定义单元格渲染器返回字符串或 JLabels 的数组或列表 您可以使用getModel http docs oracle com javas
  • 限制执行第三方软件的线程的权限

    我正在开发一个基于 Eclipse 的应用程序 能够执行第三方组件 不是 eclipse plugin 每个组件都有一个列出权限 以及相应动机 的自定义描述符 这样最终用户可以决定是否执行它 组件在单独的线程中执行 如何根据描述符限制这些线
  • 如何选择主题与队列

    当我们设计应用程序时如何选择Topic Queue类型实现 我知道 a 如果有多个消费者使用该消息 则使用 Topicb 如果只有一个消费者则使用Queue 请提供更多需要考虑的点 比如并发 消息持久化 负载均衡等等 Thanks Rw 如
  • 从 java 代码运行 Python 脚本

    这是我第一次在java中尝试python 我正在尝试从我的代码执行 python 脚本 如下所示 Process process Runtime getRuntime exec python C Users username Desktop
  • 使用 org.eclipse.xsd 和 Maven2 分析 XML 模式

    我正在尝试实现示例代码本文 http help eclipse org help32 index jsp topic org eclipse xsd doc references articles dwtip1 scpw index htm
  • java中简单程序中的“未为类型定义方法”错误

    所以我只是想学习 Java 在观看了一些教程并阅读了一些基本内容之后 我对为什么它无法运行感到困惑 package Test public class TestProg public static void main String args
  • 使用 Hibernate/Spring 生成数据库更新脚本

    我有一个项目 我们过去依赖 hibernate 来更新数据库 hibernate hbm2ddl auto update 即使在产品上 我正在将其迁移为使用 liquibase 我唯一担心的是 并不是我的团队中的每个人都是 sql 专家 因
  • 我应该在远程工作站的哪里放置 CSV 配置文件以进行分布式 JMeter 测试?

    我想做JMeter分布式测试 手册上说首先我应该开始jmeter server在远程节点上 然后我应该更新jmeter config并运行jmeter在主节点上 我做了所有这些步骤 我的测试计划包括使用 CSV 配置文件 如果我只从 1 个
  • 无法在 PHP 中接收 JSON POST 请求

    我正在将 JSON 对象从 Java 传递到 PHP 我正在使用 jdk 1 8 和 WAMPserver 下面是Java代码 import java io IOException import org apache http client
  • Java 1.8 和 tomcat 6.0.53 引起:java.io.EOFException:SSL 对等点错误关闭

    java cp catalina jar org apache catalina util ServerInfo Server version Apache Tomcat 6 0 53 Server built Apr 19 2017 22
  • 面临 process.start(); 的问题在 Android 棒棒糖中

    面临一个问题process start 在 Android 棒棒糖中 我在服务中遇到了 android lollipop 后台进程的问题 我的代码在 KitKat 之前工作正常 我有一个ProcessBuilder pBuilder并向其中
  • StringBuilder - 重置或创建新的

    我有一个条件 StringBuilder 不断存储与大型平面文件 数百 MB 中的模式匹配的行 但是 在达到条件后 我将 StringBuilder 变量的内容写入文本文件 现在我想知道是否应该通过重置对象来使用相同的变量 gt strin
  • 如何更新 Websphere 7 以使用 EL2.2?

    这就是我所做的 按照此林肯 巴克斯特的帖子 http ocpsoft com java jsf2 java jsf2 how to add the magic of el el2 to jsf 我下载了 el api 2 2 jar 和 e
  • Java - 动态创建子类

    我想以编程方式创建一个子类 我想我的选择很少 Javassist CGLib BCEL 或 ASM 用例是一个应用程序的内部是面向类的 而扩展是基于类的 因此 我不能将单个类作为由外部化脚本驱动的多个扩展的基础 现在 我该怎么做呢 我找到了
  • 使用 ProGuard 混淆代码后如何保持 javadoc 可见?

    我使用 progured 4 7 混淆了我的代码 并保留了 A 类 其中包含描述该类功能的 javadoc keep public class com mysite ClassA public keepattributes InnerCla
  • JdbcTemplate queryForInt/Long 在 Spring 3.2.2 中已弃用。应该用什么来代替呢?

    JdbcTemplate 中的 queryforInt queryforLong 方法在 Spring 3 2 中已弃用 我无法找出为什么或什么被认为是使用这些方法替换现有代码的最佳实践 典型方法 int rowCount jscoreJd
  • allure2 侦听器在控制台中输出步骤

    我正在使用 Allure2 和 TestNG 我想编写自己的侦听器 在控制台输出中打印 Steps 我在 allure 中看到了 StepLifecycleListener 接口 但我无法在 TestNg 中实现此侦听器 有什么指点吗 Ov
  • Java中ThreadFactory的使用

    有人可以简要解释一下如何以及何时使用 ThreadFactory 吗 使用和不使用 ThreadFactory 的示例可能确实有助于理解差异 Thanks 这是一种可能的用法 假设您有一个ExecutorService它执行你的Runnab
  • Tomcat 中 JNDI 的 Java Mail API 配置文档

    我花了几天时间弄清楚如何通过 JNDI 在 Tomcat 中配置 javax mail Session有认证 现在我明白了 但只是在深入研究代码之后 这次我看到了有史以来最糟糕的代码 javax mail Service connect S

随机推荐