从子文档数组中检索字段值 [英] Retrieve field value from array of sub document

查看:88
本文介绍了从子文档数组中检索字段值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些像这样的文件:

I have some documents like this:

{
  "hash": "14a076f9f6cecfc58339330eeb492e267f63062f6d5f669c7cdbfecf9eb4de32",
  "started_services": [],
  "deleted_files": [],
  "software": { 
      "adobe" : {
          "licenses" : [
                  { "key": "2384723",
                    "date": "26-10-2012"
                  },
                  { "key": "23888823",
                    "date": "09-11-2012"
                  }
          ]
      }
   }
}

如何仅检索哈希值和键"值列表?

How do I retrieve just the hash value and the list of "key" values?

我做了以下操作,但是,如您所见,结果包含了我不想要的完整路径.

I did the following, but, as you see, the result has the entire path which I do not want.

> db.repository.find({"$and": [{"datetime_int": {"$gte": 1451952000}},{"software.adobe.licenses.key" : { $exists : true}}]}, {hash:1, "software.adobe.licenses.key":1, _id:0}).limit(10)

{ "hash" : "a1532e0609aaf6acfa9e505e93af0bee0856a9a67398aeaa72aa6eb2fffd134e", "software" : { "adobe" : { "licenses" : [ { "key" : "2008350" }, { "key" : "2018350" }, { "key" : "2028350" }, { "key" : "2038350" }, { "key" : "2048350" }, { "key" : "2058350" }, { "key" : "2068350" }, { "key" : "2078350" }...]}}}

我想要的结果应如下所示:

The result I want should look like this:

{"hash": "a1532e0609aaf6acfa9e505e93af0bee0856a9a67398aeaa72aa6eb2fffd134e",
 "key": ["2008350", "2018350", "2028350", "2038350", "2048350", "2058350", "2068350", "2078350"]
}

我该怎么做?

推荐答案

您可以使用聚合框架来做到这一点.

You can do this with the aggregation framework.

db.repository.aggregate([ 
    { "$match": { 
        "datetime_int": { "$gte": 1451952000 }, 
        "software.adobe.licenses.key" : { "$exists" : true } 
    }}, 
    { "$project": { 
        "hash": 1, 
        "key": { 
            "$map": { 
                "input": "$software.adobe.licenses", 
                "as": "soft", 
                "in": "$$soft.key"
            }
        }
    }}
])

从MongoDB 3.2开始,您可以直接投影子文档数组字段.

Starting From MongoDB 3.2 you can directly project the sub-document array field.

{ "$project": { "hash": 1, "key": "$software.adobe.licenses.key"}}

这篇关于从子文档数组中检索字段值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆