mongodb - MongoDB 部分索引不适用于 $elemMatch
问题描述
我有以下文件:
user{
_id: objId(..),
name: "John Doe",
transactions:[
{
_id: 1,
amount: 10.00
item_id: 123,
condition: SUCCESS
},
{
_id: 2,
amount: 5.00
item_id: 124,
condition: FAILED
}
..
]
..
}
我尝试使用以下方法为失败的交易放置部分索引:
db.user.createIndex(
{ "transactions.condition": 1 },
{ partialFilterExpression: {"transactions.condition": "FAILED"} }
)
但是,每当我通过聚合管道进行查询或 $match 时,以下内容:
{$match: {"transactions": {$elemMatch: {"condition": "FAILED"}}}}
我总是COLLSCAN
使用explain()
. 我猜过滤器需要严格遵循的表达式transactions.condition: "FAILED"
,但我认为如果你只做一个表达式是一样{"transactions": {$elemMatch: {"condition": "FAILED"}}}
的。transactions.condition: "FAILED"
我在这里想念什么?
解决方案
是的,试试这个:
db.user.explain().aggregate({$match: {"transactions.condition": "FAILED"}})
原因是 MongoDB 不会为您构建索引。它必须是一个key
.
如果您可以将其减少为:您将获得更快的查询:
db.user.explain().aggregate([
{$match: {"transactions.condition": "FAILED"}},
{$project:{_id:0, transactions.condition:1}}
])
但这里可能不是这样。
推荐阅读
- python - Reportlab 表缺少底线
- semantic-web - 从大量异构 RDF 数据集中提取实体的所有属性和值
- r - 有没有办法计算数据框每一列中 NA 的百分比,但是将 df 分成不同的组?
- spring - 如何为多模块项目配置 Flyway?
- python - 值之间的相关性
- javascript - 使用 Kendo.culture 以欧元货币格式写入百分比值
- arrays - 将每两个元素 bash 放入数组中
- javascript - 从 XML 实现 CSS 自动完成
- python - 如何为具有多个通用外键的模型创建工厂?
- google-apps-script - 如何根据 googlescript 中的条件抛出错误?