MongoDb - 两个集合中的“join”或$

时间:2012-12-17 08:50:00

标签: mongodb aggregation-framework

假设我有2个集合:

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

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

有些女性属于某个家伙,但其中一些不属于某个家族。在上面的案例中,该女性确实属于该家伙。

如何找到所有不属于任何家伙的女性?我尝试使用$ unwind做到这一点,但没有运气。我的意思是,我不知道自己应该做些什么。

你的想法?

3 个答案:

答案 0 :(得分:2)

您可以使用以下功能:

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

还有另一种方法,即mapreduce。

答案 1 :(得分:0)

您不能使用聚合框架,因为它涉及两个不同的集合。你必须把每个女性的身份都发现在女性系列中。

答案 2 :(得分:0)

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