mongodb学习03 操作详解
插入文档
db.test.insert({"name":"jinks"});
批量插入
db.test.insert([{}, {}, {}]);- 一次批量插入过程中失败时,之前插入的信息插入保存,之后的信息不会再继续插入;
限制
- 每次插入都有一个最大限制(与驱动版本有关),超过限制驱动程序会将这次请求拆分;
- 批量插入不能在单次请求中将 多个文档批量插入到多个集合中;要是只导入原始数据(例如,从数据
feed或者MySQL中导入),可以使用命令行工具,如mongoimport`; - 所有文档 都必须小于 16 MB(未来有可能会增加);
插入前检查:
- 由于
MongoDB只进行最基本的检查,所以插入非法数据很容易。因此,应该只允许信任的源连接数据库。
删除文档
db.test.remove(限制条件);- 如果要清空整个集合,使用
db.test.drop();
更新文档
db.collection.update(query, update, options);
更新时注意
- 如果更新的文档数据包含
_id,而选择的目标文件有多个,很可能导致整个跟新失败; - 如果跟新的只是单个属性(非_id),则会跟新除
_id之外的所有属性; - 默认只更新选择的一个文档;
修改器
$set
- 指定一个字段的值。如果这个字段不存在,则创建它;
db.test.update({name: "jinks"}, {$set: {age: 24}});
$unset
$set的对应,删除一个字段;
db.test.update({name: "jinks"}, $unset: {age: 1});
$inc
- 专门来增加和减少数字;
- 对于已经存在的键,会增加它的数值;
- 只能用于整型、长整型或双精度浮点型的值,否则会报错;
$ne
- 筛选查询文档中没有此属性的文档
//会更新一个name值不是jinks的文档
db.foot.update({name: {$ne: 'jinks'}},{$set: {age: 24}})`,
$push
- 向已有的数组末尾加入一个元素,要是没有就 创建一个新的数组;
- 默认一次只能加入一个,也可以同时使用
$each加入多个; - 可以使用
$slice设置固定的长度;
* 正整数表示最早保存(数组最前)的n个数据;
* 负整数表示最后保存(数组最后)的n个数据;
* 0表示清空; - 可以使用
$sort对数组对象进行排序;
* 键值1表示最前面开始从高到低;
* 键值-1表示最后面开始从高到低;
* 数字按大小排序,字符串按字典排序;
* 没有对应属性键值的数组值不进行排序;
db.test.update({name: "jinks"}, {
$push: {
comments: {"name" : "joe", "email" : "joe@example.com"}
}
);
//$each
db.test.update({name: "jinks"}, {
$push: {
fruits: {"$each" : ["apple", "banana", "orange"]}
}
);
//$slice
db.test.update({name: "jinks"}, {
$push: {
fruits: {"$each" : [], $slice: -2}
}
);
//$sort
db.test.update({name: "jinks"}, {$push: {
fruits: {
"$each" : [{type: "apple", price: 12},{type: "banana", price: 5}],
"$slice": -1,
"$sort": {price: 1}
}}
);
$addToSet
- 与
$push类型,但会避免重复添加相同的值;
db.test.update({name: "jinks"}, {
$addToSet: {
fruits: {"$each" : ["apple", "banana", "orange"]}
}
);
$pop
- 每次按位置从数组中删除一个元素;
- 正整数表示从最后开始删除;
- 负整数表示从最前开始删除;
db.test.update({name: "jinks"}, {
$pop: {
fruits: -1
}
);
$pull
- 按特定键值从数组中删除一个元素;
db.test.update({name: "jinks"}, {
$pull: {
fruits: {type: "apple", price: 12}
}
);
基于数组的快速修改
- 按照下标直接操作
db.test.update({name: "jinks"}, {
$set: {
'fruits.2.type': 'newType'
}
);
- 按照查询文档修改
db.test.update({‘fruit.type’: 'apple'}, {
$set: {
'fruits.$.type': 'newType'
}
);
修改器速度
- 有的修改器不需要改变文档的大小,只需要将键的值修改一下,运行速度快;
- 有的数组修改器可能会改 变文档的大小,就会慢一些;
- 新插入和修改后的文档都会放在最后;
保存更新文档
特殊的更新
db.collection.update(query, update, [true/{upsert: true}]);第三个参数要是没有找到符合更新条件的文档,就会以这个条 件和更新文档为基础创建一个新的文档;
如果找到了匹配的文档,则正常更新;
保存更新
db.collection.save(data);save是一个shell函数;- 它只有一个参数:文档;
- 如果文档不存在,它会自动创建文档;如果文档存在,它 就更新这个文档;
- 要是这个文档含有
_id键,save会调用upsert;否则,会调用insert;
更新多个文档
- 在使用修改器中可以设定
options: {multi: true},开启多个文档修改; 第四个参数
返回更新文档
db.collection.findAndModify(document)
一般更新操作返回的都是更新的结果;
注意返回的是一个被更新之前的文档;
//
db.collection.findAndModify({
query: <document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>
});
//
db.test.findAndModify({
query: {name: "jinks"},
update: {
$set: {
fruits: {type: "apple", price: 13}
}
});
mongodb学习03 操作详解的更多相关文章
- mongodb学习04 操作详解(2)
查找文档 筛选查找 db.collection.find(); 返回一个集合中文档的子集,子集的 范围从 0 个文档到整个集合; db.collection.findOne(); 返回筛选的一个文档; ...
- mongodb学习05 操作详解(3)
高级查询选项 //简单查询 var cursor = db.foo.find({"foo" : "bar"}) //封装查询 var cursor = db.f ...
- MongoDB各种查询操作详解
这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下 一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...
- js学习--DOM操作详解大全一(浏览器对象)
一.客户端中的window对象 window对象表示当前浏览器的窗口,它是一个顶级对象,我们创建的所有对象.函数.变量都是window对象的成员. window对象自带了一些非常有用的方法.属性. w ...
- js学习--DOM操作详解大全 前奏(认识DOM)
一 . 节点属性 DOM 是树型结构,相应的,可以通过一些节点属性来遍历节点树: 方法 说明 nodeName 节点名称,相当于tagName.属性节点返回属性名,文本节点返回#text.nodeNa ...
- js学习--DOM操作详解大全二(window对象)
一.window - 计时器 1、setTimeout()可以用来在指定的时间之后单次调用函数.setTimeount(f,1000);//一秒后调用函数fclearTimeout();取消函数的执行 ...
- 从51跳cortex-m0学习2——程序详解
跳cortex-m0——思想转变>之后又一入门级文章,在此不敢请老鸟们过目.不过要是老鸟们低头瞅了一眼,发现错误,还请教育之,那更是感激不尽.与Cortex在某些操作方式上的异同,让自己对Cor ...
- MySQL 操作详解
MySQL 操作详解 一.实验简介 本节实验中学习并实践 MySQL 上创建数据库.创建表.查找信息等详细的语法及参数使用方法. 二.创建并使用数据库 1. 创建并选择数据库 使用SHOW语句找出服务 ...
- Hadoop深入学习:MapTask详解
转自:http://flyingdutchman.iteye.com/blog/1878775#bc2337280 Hadoop深入学习:MapTask详解 博客分类: Hadoop MapTask执 ...
随机推荐
- DB2 SQLCODE 大全
DB2错误信息sqlcode sqlstate 说明 000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 ...
- 【XLL 文档翻译】【第2部分】C API 回调函数 Excel4, Excel12
Excel4 和 Excel12 函数使得 DLL 可以调用 Excel 工作表函数.宏表函数.命令.XLL特定函数或命令.最近的一些 Excel 版本都支持 Excel12 函数.这两个函数支持下面 ...
- 如何解决exe4j生成exe文件后弹出提示信息
使用exe4j生成exe文件时会提示以上一段信息,这个主要是没有注册导致的,在welcome to exe4j的右下角有一个注册信息的地方,去找个注册码,就OK了. 通用注册码:L-g782dn2d- ...
- spring AOP 的几种实现方式(能测试)
我们经常会用到的有如下几种 1.基于代理的AOP 2.纯简单Java对象切面 3.@Aspect注解形式的 4.注入形式的Aspcet切面 一.需要的java文件 public class ChenL ...
- 解决eclipseMavne的web项目debug时没有源码
- 【转】深入Windows内核——C++中的消息机制
上节讲了消息的相关概念,本文将进一步聊聊C++中的消息机制. 从简单例子探析核心原理 在讲之前,我们先看一个简单例子:创建一个窗口和两个按钮,用来控制窗口的背景颜色.其效果 图1.效果图 Win32 ...
- iOS获取状态栏和导航栏尺寸(宽度和高度)
iPhone开发当中,有时需要获取状态栏和导航栏高度.宽度信息,方便布局其他控件.下面介绍一下如何获取这些信息: // 状态栏(statusbar) CGRect rectStatus = [[UIA ...
- JQ 特效下拉列表 写出与css一样的效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- HTML5 – 2.新元素
figcaption 定义和用法 <figcaption> 标签定义 figure 元素的标题(caption). "figcaption" 元素应该被置于 " ...
- SQLServer索引
SQLServer索引1.聚集和非聚集索引聚集索引:根据聚集索引进行排序,非聚集索引因为不根据索引键排序,所以聚集索引比非聚集索引快(一个表只有一个聚集索引)2.唯一索引和非唯一索引唯一索引时值不能重 ...