示例文档:
{"id": "1", "movie_data": "enemies": ["a", "b", "v-glaive", "t-midnight", "t-obsidian", "u-klaue"], "groups": ["avengers"], "movies": []}
{"id": "2", "movie_data": "enemies": ["a", "d"], "groups": ["avengers"], "movies": []}
{"id": "3", "movie_data": "enemies": ["a", "b", "c", "d"], "groups": ["avengers"], "movies": []}
在这里,我需要组 - 复仇者和敌人计为所有集合中敌人的不同值。
Avenger - enemy count - 9
最佳答案
您可以使用 MongoDB 的 aggregation-pipeline 来完成它:
db.collection.aggregate([
/** unwind creates multiple docs for each value in array */
{
$unwind: "$movie_data.groups"
},
/** Pick docs where we've groups as 'avengers' */
{
$match: {
"movie_data.groups": "avengers"
}
},
{
$unwind: "$movie_data.enemies"
},
{
$group: {
_id: "$movie_data.groups",
uniqueEmemies: {
$addToSet: "$movie_data.enemies" /** Adds unique value to array */
}
}
},
{
$project: {
_id : 0,
group: "$_id",
uniqueEnemyCount: {
$size: "$uniqueEmemies"
}
}
}
])
测试: mongoplayground
关于Mongodb 查询用于计算所有文档中的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61294443/