MongoDB:从两个不同的表中检索不同的计数

Dee*_*eeV 0 mongodb mongodb-query

我继承了一个包含MongoDB服务器中大量数据的项目.我正在为它写一些查询,并遇到了一个相当烦人的问题.我需要找到我们称之为的唯一值的数量ID.问题是,根据这些数据的来源,它们可能出现在两个不同的点上.

例如,表格看起来像这样:

{ 
  foo: {
     ID: "ABC123"
  },
  bar: {
     ID: undefined
  }
}
Run Code Online (Sandbox Code Playgroud)

要么

{ 
  foo: {
     ID: undefined
  },
  bar: {
     ID: "ABC123"
  }
}
Run Code Online (Sandbox Code Playgroud)

要么

{ 
  foo: {
     ID: "ABC123"
  },
  bar: {
     ID: "ABC123"
  }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我现在无法重新建模数据.我对MongoDB的了解相当有限.我想知道是否有一种方法可以使用聚合将这些连接在一起,因此我将所有ID集合到一个Document中,因此它们都是唯一的.将一个或另一个组合起来相当微不足道,但将两者分组都会给我重复.

are*_*res 5

您可以使用$project,然后$group,然后$addToSet.

db.c.aggregate([
{
    $project : {
        _id : 0,
        IDS : ["$foo.ID", "$bar.ID"]
    }
},
{
    $unwind : "$IDS"
},
{
    $group : {
        _id : 1,
        distinctIds : {
            $addToSet : "$IDS"
        }
    }
}
])
Run Code Online (Sandbox Code Playgroud)