最近两天,由于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);
相关推荐
第2章:MongoDB基础知识 - 文档:是 MongoDB 中的基本数据单元,以 JSON/BSON 格式存储。 - 集合:文档的容器,可以包含多个文档。 - 动态模式:集合中的文档可以有不同的结构。 - 命名:集合的名称可以是任意 UTF...
### MongoDB基础知识概览 #### MongoDB简介 MongoDB是一款开源、高性能、无模式的文档型数据库管理系统,属于NoSQL数据库的一种。它使用JSON格式的数据结构来存储数据,支持多种数据类型,具备灵活的数据模型,适用...
### MongoDB学习手册知识点详解 #### 一、MongoDB简介 - **名称来源**:MongoDB的名称来源于英文单词“humongous”,意指其能够处理海量数据的能力。 - **定位**:MongoDB是一款开源的、面向文档存储的NoSQL数据库...
以上内容总结了《MongoDB学习手册》的主要知识点,涵盖了MongoDB的基础概念、特性、应用场景、数据类型、索引、主从同步、分片和集群、基本操作、Shell控制台使用方法以及安全与认证等方面,为读者提供了全面的学习...
### Java操作MongoDB进行增删改查详解 #### 一、引言 在现代软件开发中,非关系型...这些知识将帮助开发者更高效地利用MongoDB处理复杂的数据查询需求。在实际开发过程中,还需要根据具体业务场景灵活运用这些技术。
它可能涵盖了从安装相关库到创建 GraphQL schema,再到连接 MongoDB 数据库并实现数据查询和修改的全过程。 【标签】"JavaScript" 暗示这个话题是关于 JavaScript 开发的,JavaScript 作为客户端和服务端都支持的...
### MongoDB基础知识 **MongoDB** 是一个基于分布式文件存储的开源数据库系统。它将数据存储为一个集合中的文档,类似于JSON对象。这种模式非常适合实时的大数据处理与分析。MongoDB具有高性能、高可用性和易于扩展...
另一个是邮件模板集合,每个文档代表一个邮件模板,包含模板名称、内容、变量等字段。 5. **模板引擎**: 邮件模板编辑可能使用了某种模板引擎,如EJS或Pug,它们允许开发者用特定语法在HTML中插入动态内容,然后在...
- **MongoDB**: 适合用于构建知识图谱,因为它支持灵活的数据模型和高效的查询能力。 - **Redis**: 一种键值存储数据库,适用于缓存和实时数据分析。 - **HBase**: 一种列族存储数据库,适合大规模随机读写访问。 *...
- MongoDB文档结构与Django模型类的字段对应,如商品模型可能包含名称、价格、库存等字段。 4. 数据库操作: - 使用Django ORM进行CRUD(创建、读取、更新、删除)操作,如添加商品、查询库存、修改价格等。 - ...
这个脚本对于批量导入非标准格式的数据到MongoDB提供了一个基础框架,但可能需要根据实际数据格式进行调整。例如,如果数据格式不是按照预设的四字段模式,`str_process()`函数需要修改以适应新的格式。此外,错误...
* 修改数据:update 表格名称 set 字段名=值 where 条件; * 删除数据:delete from 表名 where 条件; 作业 * 创建一个数据库,在该数据库中创建一张学生表,里面有姓名、年龄、爱好、地址等字段。 * 添加十条数据...
通过上述分析,我们可以了解到,在PHP中操作MongoDB涉及的主要知识点包括:检查MongoDB扩展、数据库连接和切换、数据字段筛选、查询条件构建、数据查询和链式调用等。这些知识点是开发PHP应用时,尤其是在需要频繁和...
### MySQL入门知识点详解 #### 一、数据库概述 1. **数据存储方式**: - 数据库是组织、存储和...以上是MySQL入门阶段的一些基础知识点,通过这些内容的学习,可以帮助初学者快速掌握MySQL的基本操作和使用技巧。
#### 一、数据库基础知识 **概念与分类:** - **数据库:** 存储和组织数据的一种系统。 - **分类:** - **关系型数据库:** 使用表格形式来存储数据,如 MySQL。 - **非关系型数据库:** 包括键值对存储、文档...