我想加快对我的mongoDB的查询,该查询使用$where来比较文档中的两个字段,这似乎非常慢.
我的查询看起来像这样:
db.mycollection.find({ $where : "this.lastCheckDate < this.modificationDate})
我想要做的是在我的文档中添加一个字段,即isCheckDateLowerThenModDate,我可以在其上执行可能更快的查询:
db.mycollection.find({"isCheckDateLowerThenModDate":true})
我对mongoDB很新,不知道怎么做.如果有人能给我一些提示或示例,我将不胜感激
>如何在现有集合上初始化此类字段
>如何维护这个领域.这意味着当lastCheckDate或modificationDate更改时如何更新此字段.
在此先感谢您的帮助!
最佳答案 你正在以正确的方式思考!
1.How to initialize such a field on an existing collection.
最简单的方法是加载每个文档(从您的语言),计算此字段,更新和保存.
或者您可以通过mongo shell执行更新:
db.mycollection.find().forEach(function(doc) {
if(doc.lastCheckDate < doc.modificationDate)
{
doc.isCheckDateLowerThenModDate = true;
}
else
{
doc.isCheckDateLowerThenModDate = false;
}
db.mycollection.save(doc);
});
2.How to maintain this field. Which means how to update this field when
lastCheckDate or modificationDate changes.
您必须自己从客户端代码中完成.制作一些包装器以进行更新,保存操作并每次重新计算此值.要绝对确保此更新有效 – 编写单元测试.