我在mongodb中有一组看起来像这样的项目(我正在使用pymongo):
{'type':'_sometype', 'name':'_somename', 'date':datetime, 'incoming':bool}
type
和name
在各个商品之间不是唯一的,因此可以使商品具有相同的type
和name
但不同的date
s。
问题:有时我需要确定在某个查询中检索到的项目是否是该项目的最新版本。我一直在做的是:
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
答案 0 :(得分:0)
在不知道有关您的应用程序的任何细节而不是您提供的内容的情况下,在我看来,拥有一个仅存储最新版本并按类型名称索引的单独集合可能会更好;以及历史版本的单独收藏。
答案 1 :(得分:0)
我多次调用此函数,对于给定查询中的每个项目都会调用一次,在我看来,除了反复查询某些数据之外,还有更好的方法。除非这对每个人都很好,在这种情况下,我感谢你的评价:D
老实说,如果你需要继续检查它是否是最新的,你将需要发出查询。这是不可避免的 - 需要知道的行为需要查询。
如果经常查询数据库并没有打扰你(即造成一些其他困难或并发症),那么我认为没有错。如果 导致问题,则可能是应用程序本身的设计需要重新检查。如果不了解你想要达到的目标,就很难说。就个人而言,我会说如果一切都看起来不错,你可能没有什么可担心的。与往常一样,只需确保您的查询效率不低于它所需的效率。
答案 2 :(得分:0)
我的建议是在你的物品上存放一个额外的字段,确定它是否是最新的。每次插入新项目时,您的应用程序都需要更新此字段。取决于插入项目的频率会更高效。