MongoDB:从两个不同的表中检索不同的计数
我继承了一个在MongoDB服务器中包含大量数据的项目。我正在为它写一些查询,遇到了一个相当烦人的问题。我需要找到我们将调用MongoDB:从两个不同的表中检索不同的计数,mongodb,mongodb-query,Mongodb,Mongodb Query,我继承了一个在MongoDB服务器中包含大量数据的项目。我正在为它写一些查询,遇到了一个相当烦人的问题。我需要找到我们将调用ID的唯一值的数量。问题是,根据数据的来源,它们可能出现在两个不同的点上 例如,该表可能如下所示: { foo: { ID: "ABC123" }, bar: { ID: undefined } } 或 或 不幸的是,我现在无法对数据重新建模。我对MongoDB的了解相当有限。我想知道是否有一种方法可以使用聚合将它们连接在一起,这样我
ID
的唯一值的数量。问题是,根据数据的来源,它们可能出现在两个不同的点上
例如,该表可能如下所示:
{
foo: {
ID: "ABC123"
},
bar: {
ID: undefined
}
}
或
或
不幸的是,我现在无法对数据重新建模。我对MongoDB的了解相当有限。我想知道是否有一种方法可以使用聚合将它们连接在一起,这样我就可以在一个文档中获得一组所有ID,使它们都是唯一的。对其中一个进行分组是相当简单的,但是对这两个进行分组会得到重复的结果 您可以使用
$project
然后使用$group
然后使用$addToSet
db.c.aggregate([
{
$project : {
_id : 0,
IDS : ["$foo.ID", "$bar.ID"]
}
},
{
$unwind : "$IDS"
},
{
$group : {
_id : 1,
distinctIds : {
$addToSet : "$IDS"
}
}
}
])
您可以尝试
$group
将每个条和foo
文档中的ID
获取到一个数组中,并通过$setUnion
运行它们,以在先前分组的ID
之间进行区分
db.collection.aggregate({
$group: {
"_id": null,
"ID": {
$addToSet: {
"foo_id": "$foo.ID",
"bar_id": "$bar.ID"
}
}
}
}, {
$project: {
"ID": {
$setUnion: ["$ID.foo_id", "$ID.bar_id"]
},
_id: 0
}
})
db.c.aggregate([
{
$project : {
_id : 0,
IDS : ["$foo.ID", "$bar.ID"]
}
},
{
$unwind : "$IDS"
},
{
$group : {
_id : 1,
distinctIds : {
$addToSet : "$IDS"
}
}
}
])
db.collection.aggregate({
$group: {
"_id": null,
"ID": {
$addToSet: {
"foo_id": "$foo.ID",
"bar_id": "$bar.ID"
}
}
}
}, {
$project: {
"ID": {
$setUnion: ["$ID.foo_id", "$ID.bar_id"]
},
_id: 0
}
})