Mongo部分AND TTL索引

5

是否可以基于partialFilterExpressionexpireAfterSeconds创建复杂索引? 我想要基于TTL进行清理,但是我只想对某些记录执行此操作。 我尝试使用以下命令创建这样的索引:

db.expirational.createIndex(
   { created_on : 1 },
   {  expireAfterSeconds : 20, partialFilterExpression: { rating: 2 } }
)

我的记录如下:db.expirational.insert({ 'name': 'record4', 'rating' : 1, 'created_on' : new Date() })

TTL部分可以工作并清理集合,但不关心partialFilterExpression: { rating: 2 }

这是预期的吗?我的命令有误吗?如果没有,我们应该创建一个功能请求吗?我发现这样的用例非常有用。


1
你正在使用哪个具体版本的MongoDB(在mongo shell中通过db.version()报告)? - Stennie
哇,@Stennie说得太好了。我刚在我的另一台3.4机器上测试了一下,它可以工作!昨天我试过的是3.0版本,它没有partialIndex。谢谢,我会添加一个答案。 - yuranos
1个回答

3

根据@Stennie的评论,我会回答这个问题。我真的忘记了在那台机器上的mongo实例非常古老。事实证明,它是3.0.6版本。部分索引仅在3.2中引入。

我真的很欣赏mongo的灵活性和容忍度,但有时如果至少发出警告当传递未识别的选项时会更好。

无论如何,我的情况在3.4.5上运行得很好。


MongoDB 3.4 实际上增加了更严格的索引规范验证,包括键模式和索引选项。MongoDB 的旧版本会忽略无效的选项。 - Stennie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接