首页 > 解决方案 > 如何在 pymongo 的另一个查询结果中排除一个查询结果?

问题描述

我有 3 种类型的条目:

  1. 好的条目({“good”:[“cat1”,“cat2”]})
  2. 错误条目 ({"bad": ["cat2", "cat3"]})
  3. 正常条目(没有好或坏的字段)

现在我的目标是选择一定数量 ( max_count) 的条目(最好是好的条目,但绝不是坏的条目)。

假设我有这个查询:

good_jobs = my_db.find(
    {
        "a": "some_a",
        "b": "some_c",
        "good": "cat1" 
    }

).limit(max_count)

因此,这将找到类别“cat1”的所有“好”条目,提供一些 a 和 b。如果我有更多或相同数量的好条目max_count,我就完成了。

如果不是,我必须选择一些正常的工作,既不是上面好工作的一部分,也不是剩下的坏工作。

所以,我必须这样做:

normal_jobs = my_db(
    {
        "a": "some_a",
        "b": "some_b",
        "good": {
            "$nin": ["cat1"]
        },
        "bad": {
            "$nin": ["cat1"]
        }
    }
)

但是有什么办法可以说,以后的查询会排除正式查询的结果吗?就像是:

normal_job = my_db(
    {
        "a": "some_a",
        "b": "some_b",
        "bad": {
            "$nin": ["cat1"]
        },
  --->  entries not in good jobs    
        
    }
)

正确索引对我很有帮助。

标签: pythonmongodbnosqlpymongo

解决方案


推荐阅读