mongodb update多层嵌套数组解决办法
来源:互联网 发布:js array set 去重 编辑:程序博客网 时间:2024/05/16 15:03
version: 3.4.3
{ "_id" : 1 "user_id": 1, "message" : "Yes" "translations" : [ { "destination" : "fr", "text": "Oui" }, { "destination" : "bf", "text": "uid" }, ]}
如果是一层数组,可以用如下语句更新数组里指定key的value
db.getCollection('message').update({ '_id': 1, 'translations.destination': 'fr' },{ '$set': { "translations.$.text": "asd" }}
如果再加一层嵌套
{ "_id" : 1 "user_id": 1, "message" : "Yes" "translations" : [ { "destination" : "fr", "text": "Oui", "rating" : [ { "user_id" : 1, "rating" : 1 }, { "user_id" : 2, "rating" : 1 } ] } ]}
使用这个更新语句就会报错了
db.getCollection('message').update({ '_id': 1, 'translations.destination': 'fr', 'translations.rating.user_id':'1'},{ '$set': { "translations.$.rating.$.rating": 5 }}
目前mongodb不支持多个$占位符,推荐的方法的修改数据结构,把数据格式改成这样,把数组元素改成key-value形式
{ "_id" : 1 "user_id": 1, "message" : "Yes" "translations" : { "fr": { "destination" : "fr", "text": "Oui", "rating" : [ { "user_id" : 1, "rating" : 1 }, { "user_id" : 2, "rating" : 1 } } }, "en": {...} ]}
执行如下更新语句
db.getCollection('message').update({ '_id': 1, 'translations.destination': 'fr', 'translations.rating.user_id':'1'},{ '$set': { translations.fr.rating.$.rating”: 5 }}
ps:只能使用一个$占位符的问题在社区里已经提了很久了,一直没有得到解决,希望下个版本可以解决
国内解决问题的方法太少,还是需要多去国外的论坛网站看看
方法来自于:https://pythonolyk.wordpress.com/2016/01/17/mongodb-update-nested-array-using-positional-operator/
0 0
- mongodb update多层嵌套数组解决办法
- mongodb update多层嵌套数组
- mongodb多层嵌套数组查询
- mongodb多层嵌套查询
- Mongodb数组操作$(update)、$占位符更新嵌套数组、嵌套文档集合
- C# json提取多层嵌套到数组
- C# json提取多层嵌套到数组
- Gson解析多层嵌套的数组出现的问题
- 微信小程序多层嵌套循环,二级数组遍历
- mongodb 中嵌套数组的且查询
- mongoDB javaAPi 添加嵌套数组数据 更新
- MongoDB 针对嵌套对象,多层级结构存储,增删改查
- MongoDB 针对嵌套对象,多层级结构存储,增删改查
- MongoDB 针对嵌套对象,多层级结构存储,增删改查
- MongoDB 针对嵌套对象,多层级结构存储,增删改查
- 实现DataGrid多层嵌套
- SQL 嵌套多层查询
- 枚举多层循环嵌套
- 面向对象三大基本特性,五大基本原则
- nodejs操作mongodb数据库(mongodb)
- 数据库表三个范式
- dual表
- C语言实现线性表的插入和删除操作
- mongodb update多层嵌套数组解决办法
- flask flash消息闪现
- Hadoop className (Error: Could not find or load main class XXXX)
- 解决java compiler level does not match the version of the installed java project facet
- Java学习之character类
- ActiveMQ使用步骤
- Eclipse利用命令行启动代理快速安装插件
- spring(七)---基于mysql数据库的三种连接池的配置
- 叠筐