这可能是微不足道的,但我还没有想出办法。
说我在数据库中有以下记录:
{ A: 1, B: 2, C: "Red" }
{ A: 1, B: 2, C: "Blue"}
{ A: 1, B: 3, C: "Red" }
我希望使用{A: 1, C: "Red"}
返回所有记录,但如果有多个记录具有相同的C: "Blue"
值,则不希望返回B
。因此对于上述记录,它只返回第3条记录。不会返回第一条记录,因为有两条记录具有相同的B值,其中一条记录的值为C: "Blue"
。
我只能想到通过对数据库的两个查询来执行此操作,即首先查询{A:1,C:“Red”},然后通过查询数据库中的所有元素进行检查。我想第二步可能实际上不只是一个查询。
我真的不想用{A: 1}
查询。当然,我正在通过API完成所有这些,所以这样它将是一个数据库查询,但结果列表可能比我想要的大得多。
是否有一个查询可以通过1个数据库调用完成我想要的操作?感谢。
答案 0 :(得分:2)
我不认为一个查询是可能的。但您可以使用aggregate获取所需的所有B,然后查询该B的数据库:
db.test1.aggregate(
[
{$group: {_id: "$B", count: {$sum:1}}},
{$match: {count:1}}
]
)
将返回所有B,其中只有一个记录在你的收藏中。