MongoDB - 如何对对象中的多个属性进行查询并对结果进行分组

rui*_*nix 3 mongodb

我正在尝试学习MongoDB,我似乎无法弄清楚如何做到这一点.

假设我有三个这样的对象:

         {
            "_id": 99990,
            "type" : 15,
            "attributes": [
                {
                    "id": 1,
                    "value": 115
                }
            ]
        },
        {
            "_id": 99991,
            "type" : 5,
            "attributes": [
                {
                    "id": 1,
                    "value": 120
                }
            ]
        },
        {
            "_id": 99992,
            "type" : 5,
            "attributes": [
                {
                    "id": 1,
                    "value": 120
                }
            ]
        },
        {
            "_id": 99993,
            "type" : 5,
            "attributes": [
                {
                    "id": 1,
                    "value": 150
                }
            ]
        },
Run Code Online (Sandbox Code Playgroud)

如何搜索项目并仅根据属性"id"1返回id为99993,值为150?我今天刚开始玩MongoDB,所以这可能是一个非常基本的问题.

要添加挑战,我如何通过attributes/id/value对类型5的每个项目的结果进行分组,并获得如下结果:

 "id" : 1, "value" : 150, "count" : 1
 "id" : 1, "value" : 120: "count" : 2
Run Code Online (Sandbox Code Playgroud)

这只是示例数据,模式非常复杂,但就本练习而言,它应该足够了.

cle*_*ond 5

对于第一部分,您应该能够通过执行以下操作来检索该记录:

db.collectionName.find({"attributes.id": 1, "attributes.value": 150});
Run Code Online (Sandbox Code Playgroud)

这将仅从具有属性数组元素的任何对象中检索_id字段,该元素具有id = 1和value = 150.

由于问题的第二部分涉及返回匹配计数,因此您应该使用map-reduce探索您的选项.您无法使用简单的Mongo查询生成该结果.