gpt4 book ai didi

java - 在 Mongodb 中使用 View 的性能优势/劣势

转载 作者:可可西里 更新时间:2023-11-01 09:58:36 25 4
gpt4 key购买 nike

我有一个非常复杂的聚合查询,所以我想使用如下 View :

 db.createView("weNeed","Master",
[
{$project:
{
_id:"$_id",
documents:{
$concatArrays:[
{$ifNull:
[{$map:{
input:"$documents.COMPLETED",
as:"document",
in:{
entity:"$name",
status:"COMPLETED",
name:"$$document.name",
category:"$$document.category",
description:"$$document.description",
submittedDate:"$$document.submittedDate",
expirationDate:"$$document.expirationDate",
uri:"$$document.uri"

}
}},[]]},
{$ifNull:
[{$map:{
input:"$documents.REQUIRED",
as:"document",
in:{ entity:"$name",
status:"REQUIRED",
name:"$$document.name",
category:"$$document.category",
description:"$$document.description",
submittedDate:"$$document.submittedDate",
expirationDate:"$$document.expirationDate",
uri:"$$document.uri"
}
}},[]]},
{$ifNull:
[{$map:{
input:"$documents.DEFERRED",
as:"document",
in:{ entity:"$name",
status:"DEFERRED",
name:"$$document.name",
category:"$$document.category",
description:"$$document.description",
submittedDate:"$$document.submittedDate",
expirationDate:"$$document.expirationDate",
"uri":"$$document.uri"
}
}},[]]}
]
}
}
}
]
)

现在,我可以轻松地对其使用聚合。此外,在 java-springdata 中,我可以轻松创建匹配的存储库并轻松访问数据。这同样适用于任何其他语言或框架。这也很好地了解了我的需求。

请参阅下面的查询,它的大小非常简洁:-

db.weNeed.aggregate([
{
$project:{
documents:"$documents"
}
},
{$unwind:"$documents"},
{$sort:{
"documents.entity":1,
"documents.category":1,
"documents.status":1,
"documents.name":1
}}
]
)

我试图找出在单个聚合查询上使用 View 是否有任何性能下降。还没有。

根据我的观点,以下是一些优点:-

  1. 更简洁的代码。
  2. 您的数据 View ,因此无需运行复杂查询即可从数据库中查看。
  3. 一旦原始集合中有任何保存或更新,就会得到更新。
  4. 更好的性能,因为不查询单个集合。

缺点:- 这个我不太确定。我还是觉得1. 不能与 Clustreing 配合使用。2. 可能适合对 mongo 了解较少并希望使用任何包装器框架的人。

此外,没有官方文档提及任何优点和缺点。

请帮忙!

最佳答案

在性能方面,我相信您不会获得任何好处,因为 View 不存储任何数据。它仅将查询存储在 system.views 中。因此,每次您要访问 View 时,如果您的集合上没有合适的索引,它实际上会执行聚合查询,那么您可能会遇到缓慢的响应。由于 View 不存储任何数据,因此它不能被索引

看看this获取一些信息。

关于java - 在 Mongodb 中使用 View 的性能优势/劣势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49364132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com