【问题标题】:Conditionally select fields from an array in MongoDB document有条件地从 MongoDB 文档中的数组中选择字段
【发布时间】:2018-11-12 01:25:41
【问题描述】:

我对 mongodb 比较陌生。我有一个像这样的文件:

{
    "_id" : ObjectId("5bcf50938847292ecbadc3c1"),
    "obsrvblKy" : "ABCDEFGHIJ",
    "obsrvblKnd" : "PRICE",
    "pblshrNm" : "BT",
    "pblshrSrc" : "BT",
    "dstrbtr" : "BT",
    "crtdOn" : ISODate("2018-10-23T12:47:15.544Z"),
    "qut" : [
            {
                    "qlfr" : "BID",
                    "vl" : 100,
                    "mrkTmstmp" : ISODate("2018-10-23T12:47:05.524Z"),
                    "mrkDt" : ISODate("2018-10-23T00:00:00Z")
            },
                            {
                    "qlfr" : "ASK",
                    "vl" : 101,
                    "mrkTmstmp" : ISODate("2018-10-23T12:47:05.524Z"),
                    "mrkDt" : ISODate("2018-10-23T00:00:00Z")
            },
                            {
                    "qlfr" : "MID",
                    "vl" : 100.50,
                    "mrkTmstmp" : ISODate("2018-10-23T12:47:05.524Z"),
                    "mrkDt" : ISODate("2018-10-23T00:00:00Z")
            }
    ],
    "mrkCurrncy" : "USD",
    "sttlmntDt" : "2018-10-30"        
}

我希望将此文档转换为更简单的版本,以便将其下载为 CSV 格式。

{
    "obsrvblKy" : "ABCDEFGHIJ",
    "obsrvblKnd" : "PRICE",
    "pblshrNm" : "BT",
    "pblshrSrc" : "BT",
    "dstrbtr" : "BT",
    "Bid": 100,
    "Bid-Timestamp": ISODate("2018-10-23T12:47:05.524Z"),
    "Ask": 101,
    "Ask-Timestamp": ISODate("2018-10-23T12:47:05.524Z"),
    "Mid": 100.50,
    "Mid-Timestamp": ISODate("2018-10-23T12:47:05.524Z")
}

谁能告诉我如何做到这一点。

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: mongodb mongodb-query aggregation-framework


【解决方案1】:

您可以在 3.6 版本中进行以下聚合。

db.colname.aggregate([
{"$replaceRoot":{
  "newRoot":{
    "$reduce":{
      "input":"$qut",
      "initialValue":"$$ROOT",
      "in":{
        "$mergeObjects":[
          {"$arrayToObject":[[
            ["$$this.qlfr","$$this.vl"],
            [{"$concat":["$$this.qlfr","-","TimeStamp"]},"$$this.mrkTmstmp"]
          ]]},
          "$$value"
        ]
      }
    }
  }
}},
{"$project":{"crtdOn":0,"qut":0,"mrkCurrncy":0,"sttlmntDt":0}}
])

【讨论】:

    猜你喜欢
    • 2021-09-27
    • 2014-10-08
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 2013-08-26
    • 2020-08-27
    相关资源
    最近更新 更多