1. 程式人生 > >MongoDB多維陣列的更新操作

MongoDB多維陣列的更新操作

          最近專案中遇到了MongoDB集合中多維陣列的更新操作,由於MongoDB中陣列定位符$僅支援一維陣列,對於多維陣列不支援,通過查閱資料並測試研究,得出了一種解決方式,具體操作如下所示:

 假設存在如下集合:

{
  "_id" : ObjectId("559e3683ff6788885b85ed86"),
  "name" : "China",
  "province" : [{
      "name" : "SC",
      "city" : [{
          "name" : "CD"
        }, {
          "name" : "MY"
        }]
    }, {
      "name" : "SD",
      "city" : [{
          "name" : "JN"
        }, {
          "name" : "TA"
        }]
    }]
}

如果我們想要為SC省中的CD市增加一個別名,即進行更新操作,由於$定位符在多維陣列中不支援,因此我採取的方式是先得到欲更新省市的下標,然後利用下標的方式進行的更新,程式碼如下(使用的pymongo):

mongodb = MongoClient('127.0.0.1')
collection = mongodb.test.country
result = list(collection.find({"name":"China"}))[0]
province = result.get('province')
for i in range(len(province)):
    if province[i].get('name') == "SC":
        city = province[i].get('city')
        for j in range(len(city)):
            if city[j].get('name') == 'CD':

                collection.update_one({"name":"China"},{"$set":{"province.%s.city.%s.alias"%(i,j):"cd"}})

ps:由於索引位置需要通過計算,因此該方式效率並不是很高,只是提供一種可以解決問題的方案而已。