是否可以使用spring-data-mongo 1.10创建Mongo视图?

时间:2019-11-25 18:51:35

标签: java spring mongodb spring-data-mongodb

我有一个简单的要求,就是能够从Java应用程序创建Mongo视图。我们正在使用3.4 Mongo驱动程序和spring-data-mongo 1.10.2。 The Mongo docs for db.createCollection表示您通过在选项中包含viewOn来创建视图,但是CollectionOptions使用的mongoTemplate.createCollection类没有此属性。

我已经翻阅了s-d-m 2.2版之前的源代码,但仍然看不到它受支持。如何创建视图?

1 个答案:

答案 0 :(得分:1)

我能够做到这一点。方法如下:

private void createView(BaseEntity model, String viewName, String viewDefinition) {
    // Get the model's @Document annotation so we can determine its collection
    Document doc = model.getClass().getAnnotation(Document.class);
    Assert.notNull(doc, "Error - @Document annotation is null for model class: " + model.getClass().getSimpleName());

    // Attempt to create the view
    CommandResult result = mongoTemplate.executeCommand("{" +
        "create: '" + viewName + "', " +
        "viewOn: '" + doc.collection() + "', " +
        "pipeline: [{$match: " + viewDefinition + "}]" +
    "}");

    if(result.ok()) {
        LOGGER.info("Successfully created view '{}' on collection '{}'", viewName, doc.collection());
    }
    else {
        throw new ViewCreationBeanException(
            "Failed to create view '" + viewName + "' on collection '" + doc.collection() + "' - " + result.getErrorMessage(),
            result.getException()
        );
    }
}

model是带有@Document注释的Java类,用于指定mongo集合。我在这里所做的是基于模型的基础集合为模型创建视图。 viewDefinition是视图约束,是String,例如:"{deleted: {$ne: true}}"