3

假设我有 2 个集合:

> db.fellas.findOne()
{
    "_id" : 123
    "women" : [
        1,
        12,
        34
    ]
}

> db.women.findOne()
{ "_id" : 12, "busty" : 1 }

有些女人属于某个家伙,但有些不属于。在上面的案例中,这个女人确实属于那个家伙。

我如何找到所有不属于任何男人的女人?我尝试使用 $unwind 来做到这一点,但没有运气。我的意思是,我不知道我应该进一步做什么。

你的想法?

4

3 回答 3

2

您可以使用如下函数:

db.women.find().forEach(function(w){
  if( !db.fellas.findOne({ women:{$in:[w._id]} }) )
    printjson(w); 
)}

还有另一种方式,即mapreduce。

于 2012-12-17T09:24:23.210 回答
0

您不能使用聚合框架来做到这一点,因为它涉及两个不同的集合。您必须获取每个女性 ID,并在女性系列的小伙子系列中找到它。

于 2012-12-17T08:57:07.657 回答
0

听起来聚合框架不支持连接。这可以通过 Hadoop、Apache Pig 和 MongoDb+Hadoop 连接器来完成(我已经完成了)。Apache Pig 提供了一种高级语言,可以很容易地连接多个数据源。它转化为在 Hadoop 集群中运行的 map-reduce 作业。

于 2013-09-09T12:53:34.937 回答