【问题标题】:MongoDB Event trigger after data inserted into mongoDB Collection数据插入 mongoDB 集合后触发 MongoDB 事件
【发布时间】:2017-01-13 10:16:35
【问题描述】:

我对 MongoDB 很陌生。我对 MongoDB 进行了“粗略”的操作。

我想在 MongoDB 中使用事件功能,即当数据插入 MongoDB 集合事件时,应该发生 数据应该立即由 MongoDB 本身在 UI 上发出。

这在 MongoDB 中可行吗?

如果是,那么如何?如果不是,那为什么?

提前致谢。

【问题讨论】:

    标签: java angularjs mongodb jsp spring-boot


    【解决方案1】:

    您可以将tailable cursorBytes.QUERYOPTION_AWAITDATA 选项一起使用。 Mongodb 的可尾游标文档:https://docs.mongodb.com/manual/core/tailable-cursors/

    ... 在客户将新的附加文档插入到一个封顶后 集合,可尾游标将继续检索文档。

    当您使用不满足的查询检索文档时,将返回一个空游标。然后,当您调用cur.hasNext() 时,它会等待数据出现(有超时):

    mongoTemplates.createCollection("model", new CollectionOptions(null, 10, true));
    DBObject query = new BasicDBObject("value", "val");
    DBCursor cur = mongoTemplates.getCollection("model")
                .find(query)
                .addOption(Bytes.QUERYOPTION_TAILABLE)
                .addOption(Bytes.QUERYOPTION_AWAITDATA);
    
    new Thread() {
        public void run() {
            //cur.hasNext will wait for data
            while (cur.hasNext()) {
                DBObject obj = cur.next();
                System.out.println(obj);
            }
        };
    }.start();
    
    • 当您在 mongodb 中插入以下内容时,cursor.hasNext() 将解除阻塞:db.model.insertOne({value: "val"})

    为此,必须使用“capped”选项创建集合:

    • 在java中:mongoTemplates.createCollection("model", new CollectionOptions(MAX_SIZE_BYTES, MAX_NB_DOCUMENTS, IS_CAPPED));

    • 在 mongo 客户端中:db.createCollection( "model", { capped: true, size: 10 } )

    Capped Collection 解释在documentation

    默认情况下,MongoDB 会在客户端自动关闭游标 已用尽游标中的所有结果。但是,对于 上限 集合,您可以使用保持打开状态的Tailable Cursor 在客户端用完初始游标中的结果后。

    【讨论】:

      猜你喜欢
      • 2022-01-04
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      • 2014-11-30
      相关资源
      最近更新 更多