MongoDB多维数组的更新操作
2015-07-09 16:39
766 查看
最近项目中遇到了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:由于索引位置需要通过计算,因此该方式效率并不是很高,只是提供一种可以解决问题的方案而已。
假设存在如下集合:
{
"_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:由于索引位置需要通过计算,因此该方式效率并不是很高,只是提供一种可以解决问题的方案而已。
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- PHP添加yaf xhprof mongodb 同理
- mongodb安装
- 如何在 Ubuntu 上安装 MongoDB
- perl操作MongoDB报错undefined symbol: HeUTF8解决方法
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#中使用1.7版本驱动操作MongoDB简单例子
- MongoDB系列教程(四):设置用户访问权限
- javascript数组操作总结和属性、方法介绍
- mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
- JavaScript Array扩展实现代码
- JavaScript之数组(Array)详解
- C#中Array与ArrayList用法及转换的方法
- Array栈方法和队列方法的特点说明
- Array.prototype.slice 使用扩展
- Array, Array Constructor, for in loop, typeof, instanceOf
- 实例详解ECMAScript5中新增的Array方法
- js Array的用法总结
- JavaScript 判断判断某个对象是Object还是一个Array
- php实现的mongodb操作类实例