Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB:从两个不同的表中检索不同的计数_Mongodb_Mongodb Query - Fatal编程技术网

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

MongoDB:从两个不同的表中检索不同的计数,mongodb,mongodb-query,Mongodb,Mongodb Query,我继承了一个在MongoDB服务器中包含大量数据的项目。我正在为它写一些查询,遇到了一个相当烦人的问题。我需要找到我们将调用ID的唯一值的数量。问题是,根据数据的来源,它们可能出现在两个不同的点上 例如,该表可能如下所示: { foo: { ID: "ABC123" }, bar: { ID: undefined } } 或 或 不幸的是,我现在无法对数据重新建模。我对MongoDB的了解相当有限。我想知道是否有一种方法可以使用聚合将它们连接在一起,这样我

我继承了一个在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
    }
})