我继承了一个包含MongoDB服务器中大量数据的项目.我正在为它写一些查询,并遇到了一个相当烦人的问题.我需要找到我们称之为的唯一值的数量ID
.问题是,根据这些数据的来源,它们可能出现在两个不同的点上.
例如,表格看起来像这样:
{ foo: { ID: "ABC123" }, bar: { ID: undefined } }
要么
{ foo: { ID: undefined }, bar: { ID: "ABC123" } }
要么
{ foo: { ID: "ABC123" }, bar: { ID: "ABC123" } }
不幸的是,我现在无法重新建模数据.我对MongoDB的了解相当有限.我想知道是否有一种方法可以使用聚合将这些连接在一起,因此我将所有ID集合到一个Document中,因此它们都是唯一的.将一个或另一个组合起来相当微不足道,但将两者分组都会给我重复.
您可以使用$project
,然后$group
,然后$addToSet
.
db.c.aggregate([ { $project : { _id : 0, IDS : ["$foo.ID", "$bar.ID"] } }, { $unwind : "$IDS" }, { $group : { _id : 1, distinctIds : { $addToSet : "$IDS" } } } ])