我遇到需要关联两个集合之间数据的情况。
我希望从一个集合中的文档中获取时间,然后在另一个集合中找到第一个文档或之后的文档。
时间通常不一致,并且可能存在两者之间存在显着差距的情况。
我目前正在使用它(在Node.js中,使用本机驱动程序):
coll.find({ 'TimeIndex':
{
'$lt': new Date(startTime.getTime() + 1000*10),
'$gte': startTime
}
});
但是,假设在10秒内会有一个点。如果没有怎么办?然后我需要做一些扩大搜索?
我可以删除$ lt并且只取第一个排序结果,但后来我担心搜索空间太大而且会变得很慢。
有没有更好的方法来做到这一点,我错过了?
答案 0 :(得分:0)
我认为你在这里有一个很好的方法,因为查询试图克服一定的时间差距。 假设字段有索引,那么我可以建议延长时间间隔以获得非常安全的缓冲区(并且它取决于数据加载) - 例如60秒。
甚至可以更好地检索大量匹配的文档并在客户端处理它们而不是错过某些内容并且有额外的服务器往返。
答案 1 :(得分:0)
你尝试过这样的事吗?
coll.find({ 'TimeIndex': {'$gte': startTime}})
.sort( { TimeIndex: 1 } )
.limit(1);
但我不了解表现。
如果出现性能问题,您的方法看起来不错。