MongoDB—— 写操作 Core MongoDB Operations (CRUD)
MongoDB使用BSON文件存储在collection中,本文主要介绍MongoDB中的写操作和优化策略。
主要有三种写操作:
Create
Update
Delete
Create:可以分为两种基本操作——insert和updates with the upsert option
Insert()
BSON文件最大为16M;_id通常作为主key
为了测试写操作是否成功,可以调用getLastError函数{ getLastError: 1 }
db.collection.insert( <document> )
insert方法在第一次调用的时候,自动创建collection。
以下例子中bios为collection名,根据自己情况修改。
例如:
db.bios.insert(
{
_id: 1,
name: { first: 'John', last: 'Backus' },
birth: new Date('Dec 03, 1924'),
death: new Date('Mar 17, 2007'),
contribs: [ 'Fortran', 'ALGOL', 'Backus-Naur Form', 'FP' ],
awards: [
{
award: 'W.W. McDowell Award',
year: 1967,
by: 'IEEE Computer Society'
},
{
award: 'National Medal of Science',
year: 1975,
by: 'National Science Foundation'
},
{
award: 'Turing Award',
year: 1977,
by: 'ACM'
},
{
award: 'Draper Prize',
year: 1993,
by: 'National Academy of Engineering'
}
]
}
)
如果插入操作没有指定_id,则会自动生成一个唯一的id。
使用中括号,同时插入多个文档。
db.bios.insert(
[
{
_id: 3,
name: { first: 'Grace', last: 'Hopper' },
title: 'Rear Admiral',
birth: new Date('Dec 09, 1906'),
death: new Date('Jan 01, 1992'),
contribs: [ 'UNIVAC', 'compiler', 'FLOW-MATIC', 'COBOL' ],
awards: [
{
award: 'Computer Sciences Man of the Year',
year: 1969,
by: 'Data Processing Management Association'
},
{
award: 'Distinguished Fellow',
year: 1973,
by: ' British Computer Society'
},
{
award: 'W. W. McDowell Award',
year: 1976,
by: 'IEEE Computer Society'
},
{
award: 'National Medal of Technology',
year: 1991,
by: 'United States'
}
]
},
{
_id: 4,
name: { first: 'Kristen', last: 'Nygaard' },
birth: new Date('Aug 27, 1926'),
death: new Date('Aug 10, 2002'),
contribs: [ 'OOP', 'Simula' ],
awards: [
{
award: 'Rosing Prize',
year: 1999,
by: 'Norwegian Data Association'
},
{
award: 'Turing Award',
year: 2001,
by: 'ACM'
},
{
award: 'IEEE John von Neumann Medal',
year: 2001,
by: 'IEEE'
}
]
},
{
_id: 5,
name: { first: 'Ole-Johan', last: 'Dahl' },
birth: new Date('Oct 12, 1931'),
death: new Date('Jun 29, 2002'),
contribs: [ 'OOP', 'Simula' ],
awards: [
{
award: 'Rosing Prize',
year: 1999,
by: 'Norwegian Data Association'
},
{
award: 'Turing Award',
year: 2001,
by: 'ACM'
},
{
award: 'IEEE John von Neumann Medal',
year: 2001,
by: 'IEEE'
}
]
}
]
)
调用save()函数,通过查询collection中的_id域,来决定使用insert还是update。
upsert flags 当插入的文档已经存在,需要对原文当进行覆盖的时候使用此标记。
db.collection.update( <query>,
<update>,
{ upsert: true } )
如果没有文档符合查询要求<query>,则插入文档,举例如下:
db.bios.update(
{
_id: 7,
name: { first: 'Ken', last: 'Thompson' }
},
{
$set: {
birth: new Date('Feb 04, 1943'),
contribs: [ 'UNIX', 'C', 'B', 'UTF-8' ],
awards: [
{
award: 'Turing Award',
year: 1983,
by: 'ACM'
},
{
award: 'IEEE Richard W. Hamming Medal',
year: 1990,
by: 'IEEE'
},
{
award: 'National Medal of Technology',
year: 1998,
by: 'United States'
},
{
award: 'Tsutomu Kanai Award',
year: 1999,
by: 'IEEE'
},
{
award: 'Japan Prize',
year: 2011,
by: 'The Japan Prize Foundation'
}
]
}
},
{ upsert: true } //如果文档存在,覆盖
)
Update()
主要包括两种操作,update和save
db.collection.update( <query>, <update>, <options>
使用方法同insert中介绍。
下面分情况举例:
1、更新文件中的域
db.bios.update(
{ _id: 1 },
{
$set: { 'name.middle': 'Warner' },
}
)
更新子文档name中的middle域为warner
2、添加新的域
db.bios.update(
{ _id: 3 },
{ $set: {
mbranch: 'Navy',
'name.aka': 'Amazing Grace'
}
}
)
添加mbranch域 和子文档name的aka域
3、移除域
db.bios.update(
{ _id: 3 },
{ $unset: { birth: 1 } }
)
4、更新数组
db.bios.update(
{ _id: 1 },
{ $set: { 'contribs.1': 'ALGOL 58' } }
)
更新contribs数组中第二个元素的值
5、定位,然后更新元素
db.bios.update(
{ _id: 3, 'contribs': 'compiler' },
{ $set: { 'contribs.$': 'A compiler' } }
)
定位id为3,contribs中存在compiler元素的位置,更新为A compiler
6、向数组添加元素
db.bios.update(
{ _id: 1 },
{
$push: { awards: { award: 'IBM Fellow', year: 1963, by: 'IBM' } }
}
)
添加一个新的awards域的元素
7、更新多个文档
db.bios.update(
{ 'awards.award': 'Turing' },
{ $set: { turing: true } },
{ multi: true }
)
save()函数可以用以下函数来解释:function save( doc ) {
if( doc["_id"] ) {
update( {_id: doc["_id"] }, doc, { upsert: true } );
}
else {
insert(doc);
}
}
Update Operators 操作符
Fields
| Name | Description |
|---|---|
| $inc | Increments the value of the field by the specified amount. |
| $rename | Renames a field. |
| $setOnInsert | Sets the value of a field upon documentation creation during an upsert. Has no effect on update operations that modify existing documents. |
| $set | Sets the value of a field in an existing document. |
| $unset | Removes the specified field from an existing document. |
Array Operators
| Name | Description |
|---|---|
| $ | Acts as a placeholder to update the first element that matches the query condition in an update. |
| $addToSet | Adds elements to an existing array only if they do not already exist in the set. |
| $pop | Removes the first or last item of an array. |
| $pullAll | Removes multiple values from an array. |
| $pull | Removes items from an array that match a query statement. |
| $pushAll | Deprecated. Adds several items to an array. |
| $push | Adds an item to an array. |
Modifiers
| Name | Description |
|---|---|
| $each | Modifies the $push and $addToSet operators to append multiple items for array updates. |
| $slice | Modifies the $push operator to limit the size of updated arrays. |
| $sort | Modifies the $push operator to reorder documents stored in an array. |
Bitwise
| Name | Description |
|---|---|
| $bit | Performs bitwise AND and OR updates of integer values. |
Isolation
| Name | Description |
|---|---|
| $isolated | Modifies behavior of multi-updates to improve the isolation of the operation. |
MongoDB—— 写操作 Core MongoDB Operations (CRUD)的更多相关文章
- MongoDB—— 读操作 Core MongoDB Operations (CRUD)
本文主要介绍内容:从MongoDB中请求数据的不同的方法 Note:All of the examples in this document use the mongo shell interface ...
- .Net Core MongoDB 简单操作。
一:MongoDB 简单操作类.这里引用了MongoDB.Driver. using MongoDB.Bson; using MongoDB.Driver; using System; using S ...
- MongoDB via Dotnet Core数据映射详解
用好数据映射,MongoDB via Dotnet Core开发变会成一件超级快乐的事. 一.前言 MongoDB这几年已经成为NoSQL的头部数据库. 由于MongoDB free schema ...
- MongoDB常用操作一查询find方法db.collection_name.find()
来:http://blog.csdn.net/wangli61289/article/details/40623097 https://docs.mongodb.org/manual/referenc ...
- [置顶] MongoDB 分布式操作——分片操作
MongoDB 分布式操作——分片操作 描述: 像其它分布式数据库一样,MongoDB同样支持分布式操作,且MongoDB将分布式已经集成到数据库中,其分布式体系如下图所示: 所谓的片,其实就是一个单 ...
- [转]MongoDB更新操作replaceOne()实例讲解
最近正在学习MongoDB,作为数据库的学习当然是要从CRUD开始学起了.这篇文章默认读者是知道如何安装MongoDB.如何运行MongoDB实例以及了解了MongoDB中的collection.do ...
- MongoDB常用操作一查询find方法(转)
来:http://blog.csdn.net/wangli61289/article/details/40623097 https://docs.mongodb.org/manual/referenc ...
- MongoDB常用操作整理
Mongodb:是一种NoSQL数据库,NoSQL:Not Only SQLSQL: 数据表->JDBC读取->POJO(VO.PO)->控制层转化为JSON数据->客户端 这 ...
- 笔记-mongodb数据操作
笔记-mongodb数据操作 1. 数据操作 1.1. 插入 db.COLLECTION_NAME.insert(document) 案例: db.inventory.insertOn ...
随机推荐
- 感受身边app
第一款:高考小秘书.http://www.liqucn.com/rj/519571.shtml.下载链接.我认为产品最大的优势在于对高考生非常有利,实用价值大,对于每年的高考生来说,高考资讯和大学资讯 ...
- 【Beta版本】冲刺-Day7
队伍:606notconnected 会议时间:12月15日 目录 一.行与思 二.站立式会议图片 三.燃尽图 四.代码Check-in 一.行与思 张斯巍(433) 今日进展:修改界面,应用图标 明 ...
- linux学习基础6之sed用法详解
1 sed 又称为流编辑器,它逐行将文本文件中的行读取到模式空间中间去,将符合编辑条件的行进行编辑后输出到显示器上来.默认sed不编辑原文件只处理模式空间中的内容. 2 sed用法 sed [opti ...
- Altium Designer 15 --- Make 3D PCB Library with Rhinoceros
in the mode of "渲染模式" in the mode of "着色模式" Principle 1 : In the mode of "着 ...
- DNS部署(centos 6)
DNS部署(主从) 安装环境:CentOS 6.8 准备两台主机:192.168.137.13(主DNS).192.168.137.14(从DNS) EPEL仓库使用阿里源 rpm -ivh http ...
- javascript undefined 和void0
underfine === void 0 并不完全成立 undefined不是关键字 不是保留字 在IE低版本下可以被赋值 所以代码中一般以void 0 代替undefined
- Yocto开发笔记之《工具使用:TFTP & NFS & SSH》(QQ交流群:519230208)
QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 ======================================================== TFTP工 ...
- IOS中在自定义控件(非视图控制器)的视图跳转中 代理方法与代码块的比较
//代码块与代替代理的设计方法 我就以在自定义视图中(非视图控制器,不能实现视图控制功能),通过代理和代码块两种方法分别实现视图的跳转,进行对比 首先自定义了一个视图,上面有一个已经注册了得BUtto ...
- 在项目中那个少用if else 语句,精简代码,便于维护的方法(1)
一般我在写一个函数的时候,可能需要一个回调函数,例如: function loadQtipCode(dom, title, content, width, showcb, hidecb) { $(do ...
- Nancy总结(二)记一次Nancy 框架中遇到的坑
记一次Nancy 框架中遇到的坑 前几天,公司一个项目运行很久的Nancy框架的网站,遇到了一个很诡异的问题.Session 对象跳转到另外一个页面的时候,session对象被清空了,导致用户登录不上 ...