2012-12-13 76 views
0

我希望做一个非常普通的任务,即永不删除我存储的项目,而只是用一个已删除的标记标记它们。但是,对于几乎所有的请求,我现在都必须指定deleted:false。有没有办法让你可以添加一个“默认”过滤器?这样我可以构建一个live_items筛选器并在其上进行查询?MongoDB - 结合使用默认筛选器筛选器

这只是一个可能的答案猜测。一般来说,我只想让deleted=False成为默认搜索。

谢谢!

回答

0

我继续刚才提出,结合了指定的查询Python函数:

def find_items(filt, single=False, live=True): 
    if live: 
    live = {'deleted': False} 
    filt = dict(filt.items() + live.items()) 
    if single: 
    return db.Item.find_one(filt) 
    else: 
    return db.Item.find(filt) 
0

在SQL中,您可以使用视图来做到这一点,但不幸的是,MongoDB不支持视图。

但是,如果排除标记为已删除项目的查询比包含这些项目的查询要频繁得多,则可以从主要的items集合中删除已删除的项目,并将它们置于单独的items_deleted集合中。这也具有很好的副作用,即活动项目集合的性能不会受到大量已删除项目的影响。不足之处在于,索引无法保证在两个集合中都是唯一的。