Условно выберите поля из массива в документе MongoDB - PullRequest
0 голосов
/ 11 ноября 2018

Я относительно новичок в 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")
}

Может кто-нибудь указать мне, как это можно сделать.

1 Ответ

0 голосов
/ 11 ноября 2018

Вы можете ниже агрегации в версии 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}}
])
...