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"}}}是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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章