这个部分索引是否被认为是 mongodb 中的复合索引?

时间:2021-03-20 03:31:33

标签: node.js mongodb

我在 mongodb 中有一个集合,我为其创建了以下索引。

let keys = { lastModifiedDate: -1 };
let options = { 
    expireAfterSeconds: 120, 
    partialFilterExpression: { active: false }
};
mongoose.connect(MONGO_URI, function (err, db){
   if (err) throw new Error(err); 
   db.collection("users").createIndex(keys, options)
}); 

另一种创建索引的方法(使用 shell 命令)是:

db.eventlog.createIndex(
  { lastModifiedDate: -1 },
  { expireAfterSeconds: 120, partialFilterExpression: { active: 'false' } }
);

在猫鼬模式中,我展示了以下内容:

lastModifiedDate: {
 type: Date, 
 default: new Date()
 },
 expireAfterSeconds: {
  type: Date
 }

整个事情都按原样运行,当满足“active”为“false”的条件时,文档会在 120 秒后自动删除。

我想知道的是这个索引:

{ expireAfterSeconds: 120, partialFilterExpression: { active: 'false' }}

算作复合索引吗?

我在 Mongodb 中读到过,如果创建复合索引,则最多只能有 32 个字段。我计划在集合中包含超过 32 个字段。

2 个答案:

答案 0 :(得分:2)

不,这不是复合索引,您只有一个字段:

{ lastModifiedDate: -1 }

这才是最重要的。

答案 1 :(得分:1)

<块引用>

我在 Mongodb 中读到过,如果创建复合索引,则最多只能有 32 个字段。我计划在集合中包含超过 32 个字段。

该复合索引中“只能”有 32 个字段。

您可以在集合中拥有的字段数量没有限制。

db.eventlog.createIndex(
  { lastModifiedDate: -1 },
  { expireAfterSeconds: 120, partialFilterExpression: { active: 'false' } }
);

无论如何,这不是复合索引。它只有一个字段。