MongoDB - 使用默认过滤器组合过滤器

时间:2012-12-13 09:04:43

标签: mongodb

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

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

谢谢!

2 个答案:

答案 0 :(得分:0)

在SQL中,您可以使用视图执行此操作,但遗憾的是MongoDB不支持视图。

但是,当排除标记为已删除的项目的查询比包含它们的项目更频繁时,您可以从主items集合中删除已删除的项目,并将它们放在单独的items_deleted中采集。这也具有很好的副作用,即活动项目集合的性能不会受到大量已删除项目的影响。缺点是指数不能保证在两个集合中都是唯一的。

答案 1 :(得分: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)