mongodb – 如何向包含两个其他字段的比较结果的文档添加字段

我想加快对我的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.

您必须自己从客户端代码中完成.制作一些包装器以进行更新,保存操作并每次重新计算此值.要绝对确保此更新有效 – 编写单元测试.

点赞