mongodb - 是否可以在 MongoDB 中使用带有 $unwind 运算符的索引?
问题描述
假设我有一系列产品,如下所示:
[
{
"_id": 1,
"sellerId",
"body": {
"subproducts": [
{
"sku": "sku1",
"status": "Available"
},
{
"sku": "sku2",
"status": "Unavailable"
},
...
]
}
},
{
"_id": 1,
"sellerId",
"body": {
"subproducts": [
{
"sku": "sku3",
"status": "Available"
},
{
"sku": "sku4",
"status": "Unavailable"
},
...
]
}
},
...
]
我需要在所有子产品中找到重复项。为此,我创建了一个真正完成这项工作的聚合管道。它工作正常。但是在阅读了文档和 SO 问题之后,我仍然不确定是否可以使用索引来加快查询速度。查询如下:
db.collection.aggregate([
{
"$unwind": "$body.subproducts"
},
{
"$group": {
"_id": {
sku: "$body.subproducts.sku",
sellerId: "$sellerId"
},
...
}
}
])
sort
我读到,如果添加用于阶段中使用的字段,则可以使用索引,group
因此我构建了一个索引{"body.subproducts.sku": 1, "sellerId": 1}
并添加了一个排序阶段作为第一步:
db.collection.aggregate([
{
"$sort": {
"sellerId": 1,
"body.subproducts.sku": 1
}
},
{
"$unwind": "$body.subproducts"
},
...
但这没有帮助。我在数据库中使用约 230k 产品得到的最快结果是 50 秒,根本没有排序。随着排序,它增加到近 2 分钟。我做错什么了吗?是否可以在不更改数据结构的情况下提高给定查询的速度?
解决方案
推荐阅读
- javascript - 调整标签内容和背景高度
- java - 用于在二维矩阵中查找相同符号簇的 DFS 函数
- xpages - xp:dataContext 变量是只读的吗?
- excel - 代码不会从某些 URL 中提取图像
- c# - 带有脚本标签元素的部分视图违反了内容安全策略
- sql - 根据参数隐藏列 - SSRS
- node.js - 当我想用文件缓冲区调用函数时,我必须使用哪种打字稿类型?
- .net - 如何在 AutoCAD 中保持“正交”模式始终处于活动状态
- linux - 如何在程序结束后强制 wineconsole 退出并将 ascii 输出到 linux 终端?
- javascript - 为什么我的 React 组件在 iframe 中的滚动高度为 150px?