我有一个集合,最初我们有一个审查文件的以下结构
{
_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?
提前致谢
答案 0 :(得分:0)
没有什么可以阻止您在不存在的密钥上创建索引。根据您的查询,您的索引应该反映它
db.collection.ensureIndex({crBy: 1, status: 1}, {background: 1})
我在后台选项中添加了。这将确保在重建此索引时,它不会阻止其他操作。它仍然会对状态更新的性能产生影响。建议在没有改变的事情上建立索引的唯一原因是因为在写入时重建索引的开销,在这种情况下,你将因为这个索引而获得读取速度,所以值得。 / p>