首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MongoDB视图的Spring数据

使用MongoDB视图的Spring数据
EN

Stack Overflow用户
提问于 2020-11-18 03:38:42
回答 2查看 705关注 0票数 1

为了提高查询性能,从而缩短应用程序接口响应时间,我们通过聚合数据在MongoDB上创建了视图。然而,当我们尝试使用Spring Mongo模板来使用视图时,遇到了几个问题,比如视图不支持。

代码语言:javascript
复制
Caused by: com.mongodb.MongoCommandException: Command failed with error 166 (CommandNotSupportedOnView): 'Namespace aiops.hostView is a view, not a collection' on server 192.168.20.166:30011. The full response is {​​​​​​​"ok": 0.0, "errmsg": "Namespace aiops.hostView is a view, not a collection", "code": 166, "codeName": "CommandNotSupportedOnView"}​​​​​​​
at com.mongodb.internal.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:175)
at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:303)
at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:259)

Spring是否支持开箱即用的MongoDB视图?任何例子都会有很大的帮助!

提前谢谢你

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-05 04:33:55

这有点老了,但我会留下我的解决方案,以防有人偶然发现这一点,就像我一样。

据我所知,不能使用通常的Spring Data方法:不能用@Document(value="YOUR_VIEW_NAME")注释实体并创建扩展MongoRepository类的相关存储库。

但是您可以直接从MongoTemplate查询视图,传递视图的名称。

假设你有一个像这样定义的用户实体:

代码语言:javascript
复制
public class User {
    @Id
    String id;

    String name;
}

然后,您可以将其映射到名为"userview“的视图的文档,并像这样查询它:

代码语言:javascript
复制
Query query = new Query();
query.addCriteria(Criteria.where("name").is("Bob"));

// template is an object of class MongoTemplate that you can inject or autowire
List<User> users = template.find(query, User.class, "userview");
票数 1
EN

Stack Overflow用户

发布于 2021-06-09 00:48:31

我最近遇到了同样的问题,@gere说的并不完全正确,你可以将视图与spring数据存储库一起使用,但有一些限制与视图本身的限制有关。

在我的例子中,问题是我在表示视图的文档上使用了注释CompositeIndex和索引,由于MongoDB视图使用底层集合索引,所以它没有为自己创建索引的操作命令,当spring data试图在该视图上创建索引时,MongoDB会抛出异常。删除这些注释后,我可以通过我的存储库使用它们。我建议您也使用只读存储库,以防止使用save方法或delete方法,因为我认为这也是一个视图限制。如果您进行搜索,您可以找到只读存储库的示例。

在您的例子中,您需要找出试图在视图不支持的普通集合上执行的操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64882182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档