在具有16GB RAM的Centos7服务器上运行MongoDB 4。通过pymongo驱动程序与Mongo接口。目前有大约60万个文档正在收集中。
我的收藏文档如下:
{
_metadata: {
parent_name: <str_val>
document_name: <str_val>
datetime: <datetime object (indexed)>
revision: <int>,
first_name: <str>,
last_name: <str>,
other fields...
}
tag1: <val>
tag2: <val>
...
}
(_ metadata.document_name,_metadata.revision,_metadata.parent_name)上有一个复合索引,要求组合必须唯一。
我正在尝试运行一个汇总查询,按exam_id和修订版分组,以使最终文档如下所示:
{
parent_name: <val>
docu_revision_pairs: [[<revision>, <document_name>], ...]
first_name: <val>
last_name: <val>
<other fields from _metadata>
}
我想按日期时间对文档进行排序。
我正在运行的查询是:
[
{
"$match": {},
},
{
"$sort": {
"$_metadata.datetime": -1
}
},
{
"$group":
{
"_id": {"parent_name": "$_metadata.parent_name"},
"revision": {"$push": "$_metadata.revision"},
"document_name": {"$push": "$_metadata.document_name"},
"first_name": {"$first": "$_metadata.first_name"},
"last_name": {"$first": "$_metadata.last_name"},
"datetime": {"$first": "$_metadata.datetime"},
<other fields from _metadata>
}
},
{
"$project":
{
"docu_revision_pairs": {
"$zip": {
"inputs": ["$revision", "$document_name"]
}
},
"_id": 0,
"parent_name": "$_id.parent_name",
"first_name": 1,
"last_name": 1,
"datetime": 1,
<other fields from _metadata>: 1
}
},
{
"$skip": page_size*(page_num - 1),
},
{
"$limit": page_size,
}
]
当前正在尝试对整个集合执行“默认”查询,但是大约需要10-15秒才能给出答案,而这是在我重复类似的查询以获取文件计数之后$ group阶段,以便我可以正确地对结果进行分页。
在使用中,查询将与标记为的字段进行匹配。
在默认情况下,是否有更好的方法来执行此查询?将更多字段编入索引或将元数据字段用作顶级帮助吗?
答案 0 :(得分:0)
如果您通过metadata.datetime进行索引并按照查询中希望的方式对其进行排序,则可能会加快速度