我有一个查询,我经常运行,我使用Date来排序。基本上我想抓住下一个用户根据上次处理时的“处理”,但我不想每隔X分钟更频繁地处理用户。
我有这个问题;
Users.findOne({'status':'active', 'lastCheck': {"$lt": sinceTime}).sort({"lastCheck": "ascending"}).exec(callback);
我知道为了实现这一点,我需要将lastCheck
设置为索引,但这是Date
。将其存储为数字或日期更好吗?
也许有更好的方法可以完全做到这一点?
提前致谢
答案 0 :(得分:1)
From here:" BSON Date是一个64位整数,表示自Unix纪元(1970年1月1日)以来的毫秒数。"。因此,如果您将其存储为millis,您将无法获得任何好处。我认为将它存储为Date会更好,因为您可以在堆栈中进行各种数据完整性检查和转换。使用$lt
绝对适合日期。
至于索引,你必须仔细挑选。 MongoDB在查询条件中只能使用一个索引。在这里你要查询2个字段,所以复合索引可能更好 - 取决于你的数据。也许我甚至会在lastCheck
上创建一个索引。您可以在sort
中使用相同的索引,因为您按该字段进行排序。 Mongo能够使用另一个索引进行排序。