关于nosql:检查项目是否为mongodb中的最新版本的快速方法是什么?

What's a fast way to check if an item is the most recent version in mongodb?

我在mongodb中有一个看起来像这样的项目集合(我正在使用pymongo):

1
{'type':'_sometype', 'name':'_somename', 'date':datetime, 'incoming':bool}

typename在各项之间不是唯一的,因此有可能具有相同的typename但不同的date s。

问题:有时候我需要确定在某个查询中检索到的项目是否是该项目的最新版本。我一直在做的是:

1
2
3
4
5
def isLatest(item):
        return not collection.find_one({'date':{'$gt':item['date']},
                                        'type':item['type'],
                                        'name':item['name'],
                                        'incoming':item['incoming']})

只需查询mongodb以获取具有date的更新值的匹配项。如果找到了这样的项目,则此函数返回False(因为传入的item不是最新版本)。

我多次调用此函数,一次针对给定查询中的每个项目一次,在我看来,这比重复查询某些数据有更好的方法。除非对每个人都这样,否则在这种情况下,我感谢您的评价:D

任何想法表示赞赏,在此先感谢,

-S


我的建议是在您的商品上存储一个附加字段,以确定它是否为最新字段。您的应用程序每次插入新项目时都需要更新此字段。根据插入项目的频率,效率会更高。


I call this function many times, once for each item in a given query, and it seems to me like there'd be a much better way of going about this than repeatedly querying for some data. Unless this looks OK to everybody, in which case I thank you for your evaluation :D

说实话,如果您需要继续检查它是否是最新的,则需要发出查询。这是不可避免的-需要知道的行为需要查询。

如果频繁查询数据库不会打扰您(即引起其他一些困难或麻烦),那么我认为没有任何问题。如果引起问题,则可能是需要重新检查应用程序本身的设计。如果不了解您要实现的目标,这很难说。不过,就我个人而言,我想说如果一切看起来都不错,那么您可能不必担心。与往常一样,只需确保查询的效率不会比需要的低。


在不了解您的应用程序详细信息的情况下,提供一个单独的集合,该集合仅存储最新版本并按类型名称进行索引,这似乎更好。以及用于历史版本的单独集合。