关闭

MongoDB多维数组的更新操作

标签: mongodbarray
1113人阅读 评论(0) 收藏 举报
分类:

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



        

         

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4535次
    • 积分:127
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章分类