mongodb - 索引一个最初在 MongoDB 中不存在的字段

标签 mongodb indexing database

我有一个集合,最初我们有一个评论文档的以下结构

{
_id:ObjectId(...),
comment:"hi, test comment",
crBy:ObjectId(...)
}

现在当管理员审查这个时,状态字段被添加到它更新文档到

   {
    _id:ObjectId(...),
    comment:"hi, test comment",
    crBy:ObjectId(...),
    status:"approved"
    }

由于某些原因,我最初无法获得状态,必须在管理员审核它时输入它,并且它带有已批准或未批准的值

所以现在获取用户创建的所有评论并获得批准的查询就像...... db.reviews.find({"crBy":ObjectId(...),"status":"approved"})

我正在通过创建包含 crBy 和状态字段的索引来优化读取

我的问题是:

1.Am i creating the index in the right way?

2. I have read that indexes should contain fields that don't change. So in my case status field gets inserted afterwards. How does it
impact my performance?

3. Considering my case, what do you suggest to be the best possible way to optimize reads in such a scenario where a field comes later
on?

提前致谢

最佳答案

没有什么能阻止您在不存在的键上创建索引。鉴于您的查询,您的索引应该反射(reflect)它

db.collection.ensureIndex({crBy: 1, status: 1}, {background: 1})

我添加了后台选项。这将确保在重建此索引时,不会阻塞其他操作。它仍然会对状态更新的性能产生影响。建议在不改变的东西上建立索引的唯一原因是因为在写入时重建索引的开销,在这种情况下,你会因为这个索引而获得读取速度,所以这是值得的。

关于mongodb - 索引一个最初在 MongoDB 中不存在的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24088570/

相关文章:

java - 为什么使用 jcombobox actionListener 后没有执行 tableModelListener 代码

sql - 元组关系演算中的聚合函数

javascript - Node.js 使用 Express 和 Mongoose 设置 Passport 时出现问题

java - 使用 Java 构建路径将 Spring 项目添加到 Spring Boot

java - Hibernate 4.3 索引注释

mysql - 主键是否隐式存储在mysql myisam引擎中的其他键中?

database - 数据字典还是ORM?

javascript - 我的 Node 脚本在函数完成后挂起

c# - 在 Asp.Net Core 上为 MongoDB ObjectId 创建一个 ModelBinder

java - 字符串越界,