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:由于索引位置需要通过计算,因此该方式效率并不是很高,只是提供一种可以解决问题的方案而已。



        

         



分享给朋友:
您可能感兴趣的文章:
随机阅读: