0

这可能是微不足道的,但我还没有想出办法做到这一点。

假设我在数据库中有以下记录:

{ 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值,则不返回。所以对于上面的记录,它只会返回第三条记录。第一条记录不会被返回,因为有两条记录具有相同的 B 值,其中一条具有C: "Blue"作为值。

我只能想到通过对数据库的两个查询来做到这一点,即首先查询{A:1,C:“Red”},然后通过查询数据库中的所有元素来检查。我想第二步实际上可能不仅仅是一个查询。

我真的不想用{A: 1}. 当然,我是通过 API 完成这一切的,所以这样它会是一个数据库查询,但结果列表可能比我想要的要大得多。

是否有一个查询可以通过 1 个数据库调用来完成我想要的操作?谢谢。

4

1 回答 1

2

我认为一个查询是不可能的。但是您可以通过聚合获得所有想要的 B ,然后查询该 B 的数据库:

db.test1.aggregate(
    [
        {$group: {_id: "$B", count: {$sum:1}}},
        {$match: {count:1}}
    ]
)

将返回所有 B,您的集合中只有一条记录。

于 2013-08-11T08:12:01.773 回答