MongoDB基本使用
来源:互联网 发布:哪款网络电视机好 编辑:程序博客网 时间:2024/05/18 22:45
MongoDB自带JavaScript shell
MongoDB shell
- 命令db查看当前指向哪个数据库
- 创建 db.col.insert(post)
- 读取db.col.find()
db.col.findOne() - 更新post.comments=[] db.col.update({title:”My Blog Post”},post)
update函数有两个参数至少,第一个参数用于匹配待更新的文档,第二个参数是新的文档。 - 删除
db.col.remove({title:"My Blog Post"})
db.col.remove() //删除集合中的所有文档
db.col.drop() //删除集合
数据类型
JSON只有null,布尔,数字,字符串,数组和对象这几种数据类型。
MongoDB数据类型:
- null
- 布尔
- 数值 默认64位浮点数型数值;NumberInt(“3”)表示4字节带符号整数;NumberLong(“3”)表示8字节带符号整数;
- 字符串 支持UTF-8字符串
- 日期; 不区分时区。自新纪元以来的毫秒数;要用new Date()而非Date()后者返回的日期的字符串而非日期的对象;
- 正则表达式
- 数组
- 数组可以包含不同类型的元素
- 数组中甚至可以嵌套数组- MongoDB能够理解数组的结构,并深入其内部对其内容进行操作;
- 内嵌文档
对象ID ;12字节的id,是文档的唯一标识。ObjectId()
每个集合里的文档的ID是唯一的,不同集合文档ID可以重复
前4个字节是时间戳,从标准纪元开始,单位为秒;
4-6字节是机器主机名的散列值(hash);
7-8字节是产生ObjectId的进程的进程标识符(PID),用于区分同一机器上的多线程;
9-11字节是一个自动增加的计数器,保证同一同一秒产生的ObjectId也是不同的;一秒钟同时允许2563个ObjectId.
二进制数据;非UTF-8字符串要以这种形式保存
- 代码;查询和文档中可以插入任意JavaScript代码;
使用
- 连接到指定机器上的数据库:mongo 机器名:端口/数据库名
- 启动shell不连接任何数据库:
mongo -nodb
- 再连接到指定数据库:
conn = new Mongo("some-host:30000")db = conn.getDB("myDB")
> help
获取帮助- 只输入函数名可以查看函数的实现代码
mongo script1.js script2.js script3.js
mongo --quiet server-1:30000/foo scirpt1.js script2.js
指定主机,数据库,执行脚本- shell辅助函数不能在文件中使用,如
show dbs
对应db.getMongo().getDbs()
show collections
对应db.getCollectionNames()
use foo
对应db.getSisterDB("foo")
load("defineConnectionTo.js")
加载执行> run("ls","-l","/usr/local")
用来执行命令行程序- 集合命名如果包含保留字的话
db.getCollection("version")
> Object.bsonsize(doc)
查看文档大小;要求文档大小必须小于16MB- 文档替换
> var jone = db.col.findOne({name:"jone"})> jone.releationships = {friends:jone.friends,enemies:jone.enemies}{ "friends" : 32, "enemies" : 2 }> jone.usename=jone.namejone> delete jone.friendstrue> delete jone.enemiestrue> delete jone.nametrue> db.col.update({name:"jone"},jone)WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone" }>
- 原子性的更新修改器,对指定文档的某些字段进行更新
//$inc修改器用来增加一个键的值,如果不存在就创建这个键> db.col.update({usename:"jone"},{"$inc":{friends:1}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone", "friends" : 1 }> db.col.update({usename:jone},{"$set":{friends:2}})WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 })> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone", "friends" : 1 }> db.col.update({usename:"jone"},{"$set":{friends:2}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone", "friends" : 2 }//unst将这个键删除> db.col.update({usename:"jone"},{"$unset":{friends:1}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone" }
- “$push”向数组末尾加一个元素,如果数组不存在,则创建一个新的数组
> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone" }> db.col.update({usename:"jone"},{"$push":{comments:{name:"joe",email:"joe@example.com",content:"nice"}}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone", "comments" : [ { "name" : "joe", "email" : "joe@example.com", "content" : "nice" } ] }> db.col.update({usename:"jone"},{"$push":{comments:{name:"bob",email:"bob@example.com",content:"good"}}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone", "comments" : [ { "name" : "joe", "email" : "joe@example.com", "content" : "nice" }, { "name" : "bob", "email" : "bob@example.com", "content" : "good" } ] }
- “
each“子操作符与“ push”结合可以一次插入多个元素 - “$slice”限制数组的长度
- “$sort”排序
- “$ne”条件检验,比如在向某个数组中插入数据时,如果不存在某个内容就插入
- “$addToSet”也是验重
{"$pop":{"key":1}}
从数组末尾删除一个元素{"$pop":{"key":-1}}
从数组头部删除一个元素{"$pull":{tem:"flower"}}
删除数组中的所有”flower”
可通过下标访问数组comments.0
数组的第一项- 定位符”$”
db.col.update({"commments.author:"Jone"},{"$set":{"comments.$.authors:"Jim"}})
- $inc因为就地修改,不改变文档结构,所以比较快;数组修改器可能要改变文档大小,会慢一些;
- 填充因子(paddingFactor)是MongoDB为每个新文档预留的增长空间。让一个文档增大,填充因子会变大,如果后面的更新导致了更多次的文档移动,填充因子会持续增大;如果不再有文档移动,填充因子会慢慢降低到1.
- upsert更新是在找到符合更新条件的对象时,进行更新;找不到时就按update设定的条件新建一个文档;
- $setOnInsert创建文档的时候创建字段并赋值,以后所有的更新操作时,这个值不再改变;
- update函数的第四个参数为true表示当有多个符合条件的文档时,全部更新;
- getLastError命令可以返回最后一次操作的相关信息;键n的值表示被更新的文档的数量
db.runCommand({getLastError:1})
- findAndModify返回符合更新条件的文档更新前的值;
ps = db.runCommand({"findAndModify": "processes", query:{status:"READY"}, sort:{priority:-1}, update:{"$set":{stats:"RUNNING"}}}).value
- 写入安全(write concern)是一种客户端设置,用于控制写入的安全机制;分为两种:应答式写入(数据库会给出响应,告诉你是否写入成功)和非应答式写入(不知道是否写入成功)。默认是应答式;
- shell对非应答式的支持与客户端有区别:shell执行非应答式时会检查最后一个操作是否成功;即便前面一系列的无效操作,最后一个操作是有效的,就不会报错;
- 2012年之前,默认的写入安全方式是非应答的;如何区分:新的都用的MongoClient类;旧的连接对象用的Mondo或者Connection或其他;
0 0
- MongoDB基本使用
- MongoDB基本使用
- MongoDB基本使用
- MongoDB基本使用
- MongoDB基本使用
- MongoDB基本使用
- MongoDB基本使用
- MongoDB基本使用
- MongoDB基本使用
- MongoDB基本使用
- mongodb 基本使用
- mongodb基本使用1
- mongodb基本使用2
- MongoDB基本使用
- mongoDB的基本使用
- MongoDB基本使用
- MongoDB基本使用
- MongoDB基本使用
- innodb_autoinc_lock_mode的表现形式和选值参考
- RecyclerView基础用法
- HTML_13_javascript_小游戏_开心消消乐
- Leetcode #407 Trapping Rain Water
- 微信公众号平台开发(二)信息的分类.md
- MongoDB基本使用
- java标识符 运算符
- Docker学习笔记之top,inspect,exec,export命令
- 【CodeForces】445A - DZY Loves Chessboard(dfs)
- C语言之——左旋字符串
- 第九周OJ总结<7>-大奖赛计分
- 技术转行产品总结思考(一)
- jquery加载页面的方法(页面加载完成就执行)
- Java回顾之多线程