我们如何在阵列字段中使用$ toUpper?

时间:2018-05-07 08:15:21

标签: mongodb aggregation-framework

我们如何使用toUpper数组字段,我有以下查询将数组字段'locations'与camel case项数组进行比较,现在我的问题是我们如何将locations字段值转换为大写然后与数组进行比较。

var array = ["KABUL","KAPISA","WARDAK","LOGAR","PARWAN","BAGHLAN","NANGARHAR","LAGHMAN",
                                "BAMYAN","PANJSHER","KHOST","GHAZNI","KUNARHA","PAKTYA","PAKTIKA","KUNDUZ",
                                "NOORISTAN","SAMANGAN","TAKHAR","DAYKUNDI","BADAKHSHAN","BALKH","GHOR",
                                "UROZGAN","FARYAB","ZABUL","SAR-E-PUL","NIMROZ","JAWZJAN","HELMAND","BADGHIS",
                                "KANDAHAR","FARAH","HERAT"];

db.getCollection('test').aggregate([

{ "$project": {
    "locations": {
      "$map": {
        "input": {
          "$setIntersection": ["$locations", array ]
        },
        "in": { "k": "$$this", "v": 1 }
      }
    }
  }},
  { "$unwind": "$locations" },
  { "$group": {
    "_id": "$locations.k",
    "v": { "$sum": "$locations.v" }
  }},
  { "$sort": { "_id": 1 } },
  { "$group": {
     "_id": null,
     "obj": { "$push": { "k": "$_id", "v": "$v" } } 
  }},
  { "$replaceRoot": {
    "newRoot": { "$arrayToObject": "$obj" }  
  }}
])

locations字段就像:

"locations" : [ 
    "Afghanistan", 
    "Kabul",
    .....
],

1 个答案:

答案 0 :(得分:1)

当然,使用$map转换“每个”元素:

  { "$project": {
    "locations": {
      "$map": {
        "input": {
          "$setIntersection": [
            { "$map": { "input": "$locations", "in": { "$toUpper": "$$this" } } },
            array
          ]
        },
        "in": { "k": "$$this", "v": 1 }
      }
    }
  }},