我有以下文件:
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"}}}
是identicial到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}}
])
但这里的情况可能并非如此。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句