数据插入mongoDB Collection后,MongoDB事件触发器

Abh*_*are 5 java jsp mongodb angularjs spring-boot

我是MongoDB的新手.我已经使用MongoDB进行了"粗略"操作.

我想在MongoDB中使用事件功能,当数据插入到MongoDB时,应该发生事件,并且MongoDB本身应该在UI上立即发送数据.

这在MongoDB中可能吗?

如果是,那么如何?如果没有那么为什么?

提前致谢.

ale*_*xbt 1

您可以将 atailable cursor与选项一起使用Bytes.QUERYOPTION_AWAITDATA。关于 Mongodb 的 tailable 游标的文档: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();
Run Code Online (Sandbox Code Playgroud)
  • cursor.hasNext()当您在 mongodb 中插入以下内容时将解锁:db.model.insertOne({value: "val"})

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

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

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

文档Capped Collection中对此进行了解释:

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