从mongodb集合中的嵌入式数组对象仅获取特定字段

戈皮

我有一个MongoDB集合,其外观与下面的文档相同,我只想找到一个存在于嵌入式数组对象中的字段值计数。

我尝试在下面的查询中获取数据,但不起作用

db.mycollection.find({'quizzes':{skill:'html'}}).pretty()

下面是带有样本值的mongo文档结构。结构与我的原始文件相同

{

"user": "values",

"date": "234-234-234-234",

"quizzes":[

   {

     "skill": "html",
     "score": "12"

}

]

}

从上述文档中,我只想获取作为嵌入式文档的测验数组中存在的技能字段值。我的输出应该像

{
"html": 10,
"php": 20,
"C#": 15,
"java": 18,
.
.
.
.
.

}
Himanshu Sharma

您可以使用该distinct()方法。以下查询可以为我们提供预期的输出:

db.mycollection.distinct("quizzes.skill");

有关更多信息,请检查https://docs.mongodb.com/manual/reference/method/db.collection.distinct/

编辑我:也计算技能数

db.collection.aggregate([
    {
        $unwind:"$quizzes"
    },
    {
        $group:{
            "_id":"$quizzes.skill",
            "k":{
                $first:"$quizzes.skill"
            },
            "v":{
                $sum:1
            }
        }
    },
    {
        $project:{
            "_id":0
        }
    },
    {
        $group:{
            "_id":null,
            "data":{
                $push:"$$ROOT"
            }
        }
    },
    {
        $project:{
            "data":{
                $arrayToObject:"$data"
            }
        }
    },
    {
        $replaceRoot:{
            "newRoot":"$data"
        }
    }
]).pretty()

数据集:

{
    "_id" : ObjectId("5d66ad357d0ab652c42315f7"),
    "user" : "values",
    "date" : "234-234-234-234",
    "quizzes" : [
        {
            "skill" : "html",
            "score" : "12"
        },
        {
            "skill" : "css",
            "score" : "10"
        }
    ]
}
{
    "_id" : ObjectId("5d66ad357d0ab652c42315f8"),
    "user" : "values2",
    "date" : "234-234-234-234",
    "quizzes" : [
        {
            "skill" : "Java",
            "score" : "12"
        },
        {
            "skill" : "html",
            "score" : "10"
        }
    ]
}

输出:

{ "Java" : 1, "css" : 1, "html" : 2 }

说明:我们正在创建一个键和值对(k,v),其中“ k”是技能,而“ v”是技能出现的次数。将字段名称命名为'k'和'v'的原因是因为$ arrayToObject仅接受这些字段。稍后,所有键和值将合并以准备最终文档。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何对MongoDB中的嵌入式对象进行排序

MongoDB嵌入式文档数组:仅获取一个具有特定属性的嵌入式文档

根据由字段值指定的嵌入式对象的字段值对MongoDB集合排序?

基于范围查询MongoDB中嵌入式文档的数组

从嵌入式文档中删除字段

MongoDB-在嵌入式文档中找不到特定字段

从文档嵌入式数组Mongodb Java获取字段的键

更新mongodb嵌入式数组中的所有元素

在MongoDb中,如何获取嵌入式数组内部发生的单个匹配元素的max \ min \ avg \ count?

查询Spring Data MongoDB中嵌入式文档的数组

需要从MongoDB嵌入式集合中计算单个字段计数

更新mongodb中arrays对象的arrays的嵌入式文档

在数组mongodb中查找嵌入式对象

如何在mongodb聚合中获取嵌入式集合的总和?

嵌入式文档数组中的MongoDB Aggregate ObjectId

MongoDB C#驱动程序-更新嵌入式文档数组中的所有字段

如何在MongoDB中的嵌入式数组对象中插入json对象?

聚合管道中的嵌入式文档集合中的参考文档字段

如何在嵌入式数组mongodb中查询嵌入式文档

检索嵌入式数组并作为mongodb中的对象集合返回

在集合中查找嵌套(嵌入式)对象

如何查看对象是否包含在嵌入式NSArray中,然后获取集合中的其他项

使用Mongoose从Node从MongoDB中的复杂嵌入式集合中插入,更新和删除

返回特定的mongodb嵌入式文档

在文档中引用文档的嵌入式数组的嵌入式数组上查询Doctrine2和MongoDB

Mongodb更新嵌入式字段

使用C#在MongoDB集合中的嵌入式文档的子句查询中的投影

如何查询Mongodb的嵌入式数组

Mongodb:将字段添加到嵌入式文档中(无数组)