mongodb基础知识-修改字段名称
最近两天,由于mongo驱动版本的问题,导致系统不兼容,填了几天坑,终于填完了,但是并没有熊根本上解决问题。后面决定要进行一次大重构,增加一个dao层,后台的mvc架构,以前觉得dao和service的很多工作重复,经过这个以后,才发现dao层确实很有必要,不过service和dao层的数据交换格式千万不要用mongo驱动自带的,mongo2.x以前用的是DBobject, 3.x以后又写了一个Document,当然3.x还是可以用Dbobject,并且也提供了转换为Document'的方法,但是这并不是官方的推荐形式,这只能怪mongo官方一开始没有确定好数据交换的类型,所以最好在service和dao之间的数据交换使用jdk自带的类或者我们自己创建的类,最好不要用第三方的类来作为数据交换格式。
如果遇到数据底库层切换,只需要更改dao层,从新写一个就行了,其他所有的业务层都不需要更改,我就是因为之前懒得写dao,直接在service层操作mongo,导致mongo切换时修改很多的service实现。
最后说说最近用到的一个mongo操作,网上搜了一下,找到了解决方案。其实要实现的功能就是把字段改名,我一开始没有注意到官方文档中一个操作符可以实现这个功能,就自己来修改,简单暴力,先把原来字段的值,设置到新字段,然后删除原来的字段,结果看到官方$rename说明时,内部也是差不过这个实现方式。
1.把一个字段的值复制到一个新字段上:
// 第三个参数false表示文档不存在是否新增, 默认false // 第四个参数true表示是否更新满足条件的所有文档, 默认false db.coll_name.find({}).forEach( function(doc) { db.coll_name.update({"_id" : doc._id}, {"set" : {"new_filed" : doc.old_field}}, false, true); } ); //
2.删除字段
// 删除字段的语法是 { $unset: { <field1>: "", ... } } // 比如删除一个name字段 db.coll_name.update({"_id" : 1}, {"$unset": { "name": ""}}, false, false); db.coll_name.update({"_id" : 1}, {"$unset": { "name": "无所谓"}}, false, false); // 这两种方式都是可以得,就是说要删除的字段你设置值不会影响删除字段的操作
3.修改字段名
db.coll_name.update({}, {"$rename": { "old_field": "new_field"}}, false, true);
上一篇: mongodb基础知识-返回部分字段
下一篇: Apache Geode 分布式系统成员
推荐阅读
-
ArcGIS怎么修改属性表字段名称
-
ArcGIS怎么修改属性表字段名称
-
遍历某个数组里的字段,拼接到需要的对象里,相对应的修改字段名称(代码实例)
-
mongodb使用_遍历列表中的元素,作为变量,循环修改mongodb中的字段
-
在SQL Server中修改字段类型和字段名称
-
MySql增加字段、删除字段、修改字段名称、修改字段类型_MySQL
-
遍历某个数组里的字段,拼接到需要的对象里,相对应的修改字段名称(代码实例)
-
mongodb使用_遍历列表中的元素,作为变量,循环修改mongodb中的字段
-
MySql增加字段、删除字段、修改字段名称、修改字段类型_MySQL
-
php laravel DB join 字段名称修改