MongoDB多维数组的更新操作

原创 2015年07月09日 16:39:58

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



        

         

版权声明:本文为博主原创文章,未经博主允许不得转载。

mongodb update多层嵌套数组解决办法

version: 3.4.3{ "_id" : 1 "user_id": 1, "message" : "Yes" "translations" : [ { "des...
  • mushuntaosama
  • mushuntaosama
  • 2017年04月25日 17:13
  • 1413

MongoDB之数组更新操作

今天第一次在MongoDB里用到了文档中数组的更新操作,故整理如下,可能会有不恰当的地方,望指正。      假设有如下集合user:    db.user.find() {"_i...
  • LJS109
  • LJS109
  • 2015年05月26日 12:22
  • 1664

MongoDB 数组修改更新方法,很不错拿出来分享一下

MongoDB数组修改器更新数据这里,我们将了解一下数组修改器。数组,是我们经常看到和使用到的且非常有用的数据结构:它不仅可以通过索进行引用,还可以作为集合来使用。数组修改器,顾名思义,它是用来修改数...
  • zilu_wang
  • zilu_wang
  • 2016年05月19日 21:39
  • 4639

Mongodb数据更新命令、操作符

一、Mongodb数据更新命令 Mongodb更新有两个命令:update、save。 1.1update命令 update命令格式: db.collection.update...
  • u014344668
  • u014344668
  • 2016年09月07日 16:19
  • 2624

MongoDB数组修改器更新数据

MongoDB数组修改器更新数据      这里,我们将了解一下数组修改器。数组,是我们经常看到和使用到的且非常有用的数据结构:它不仅可以通过索进行引用,还可以作为集合来使用。数组修改器,...
  • huwei2003
  • huwei2003
  • 2014年11月14日 18:23
  • 10855

MongoDB数组或者对象数据查询

一、查询主键objectId db.product.find({"_id",ObjectId("564e845ee4b0281c3f8fcf60")}) 二、查询数组或者对象内容 使用$elemMat...
  • pshaoyi
  • pshaoyi
  • 2015年11月20日 16:45
  • 1502

Mongodb 内嵌数组操作

mongodb update 数组 操作 张映 发表于 2014-07-29 分类目录: nosql 标签:$, $addtoset, $each, $pop, $pull, $pullal...
  • u010807583
  • u010807583
  • 2015年11月19日 13:17
  • 4876

mongodb update多层嵌套数组

This is more or less my current schema:{ "_id" : 1 "user_id": 1, "message" : "Yes" "translatio...
  • mushuntaosama
  • mushuntaosama
  • 2017年04月25日 17:20
  • 1395

学习MongoDB--(4-2):MongoDB查询(数组、内嵌文档和$where)

上篇主要介绍了一些基本的查询条件操作符的使用,主要针对的是一些单值,我们这次来讲讲如何查询文档内的数组和嵌入文档,并讲一下复杂查询"$where"。 【查询数组】 查询数组很容易,对于数组,我们可...
  • DrifterJ
  • DrifterJ
  • 2012年08月08日 22:21
  • 70960

Mongodb更新数组$pull修饰符

一、$pull修饰符会删除掉数组中符合条件的元素,使用的格式是: { $pull: { : , : , ... } } 二、指定一个值删除所有的列表 给一个stores集合下的文档 { ...
  • yaomingyang
  • yaomingyang
  • 2017年12月03日 15:16
  • 273
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MongoDB多维数组的更新操作
举报原因:
原因补充:

(最多只允许输入30个字)