MongoDB快速入门
来源:互联网 发布:java 字符串拼接 效率 编辑:程序博客网 时间:2024/06/02 02:32
MongoDB快速入门
运行mongodb
运行并设置数据目录
mongod.exe --dbpath d:\data\db
作为服务运行
mongod.exe --bind_ip yourIPadress --logpath "C:\data\dbConf\mongodb.log" --logappend --dbpath "C:\data\db" --port yourPortNumber --serviceName "YourServiceName" --serviceDisplayName "YourServiceName" --install
- –bind_ip 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
- –logpath 定MongoDB日志文件,注意是指定文件不是目录
- –logappend 使用追加的方式写日志
- –dbpath 指定数据库路径
- –port 指定服务端口号,默认端口27017
- –serviceName 指定服务名称
- –serviceDisplayName 指定服务名称,有多个mongodb服务时执行。
- –install 指定作为一个Windows服务安装。
进入shell
mongo
MongoDB概念解析
MongoDB常用操作
连接到数据库
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
创建数据库
use test-- 查看数据库show dbs-- 插入数据db.mydb.insert({"name":"ck"})-- 创建表db.createCollection("log");-- 删除表db.mydb.drop();-- 查看表show tables;
删除数据库
-- 删除当前数据库db.dropDatabase()
插入记录(插入文档)
document的结构和json一样,所有存储在集合(collection)中的数据都时BSON(Binary JSON)。
db.COLLECTION_NAME.insert(doucument)
插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。
更新文档
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> })-- 实例db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如
, inc…)等,也可以理解为sql update查询内set后面的 - upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
删除文档
db.collection.remove( <query>, <justOne>)-- VERSION >= 2.6db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> })
查询文档
db.COLLECTION_NAME.find()-- 美化输出db.COLLECTION_NAME.find().pretty()
和RDBMS查询Where比较:
类似的有大于(
- AND语法
db.col.find({key1:value1, key2:value2}).pretty()
- OR语法
db.col.find( { $or: [ {key1: value1}, {key2:value2} ] }).pretty()
- 根据字段类型匹配
使用$type关键字,对应的字段类型列表如下:
- Skip 和 Limit方法
db.COLLECTION_NAME.find().limit(NUMBER)db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
- Sort排序
sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1
为升序排列,而-1是用于降序排列
db.COLLECTION_NAME.find().sort({KEY:1})
建立索引
-- 创建索引db.COLLECTION_NAME.ensureIndex({KEY:1})-- 查询索引db.COLLECTION_NAME.getIndexes();
语法中 Key值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。
background
:Boolean建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false。unique
:Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false.name
:string 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。dropDups
:Boolean 在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.sparse
: Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 falseexpireAfterSeconds
:integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。v
:index version 索引的版本号。默认的索引版本取决于mongod创建索引时
运行的版本。weights
:document 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。default_language
:string对于文本索引,该参数决定了停用词及词干和词器的规则的
列表。默认为英语language_override
:string 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.
聚合(待补充)
MongoDB复制(副本集)
副本集设置
mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"-- 示例 将27018端口的副本加入到27017的副本集mongod --port 27017 --dbpath "D:/data/rs1" --replSet rs0mongod --port 27018 --dbpath "D:/data/rs2" --replSet rs0 mongo localhost:27017-- 查询是否主节点`>`rs.isMaster() `>`rs.add("127.0.0.1:27018")
只能通过主节点执行add操作添加副本集,被添加的副本集名称要与主节点副本一致;主机宕机后,副本会接管成为主节点。
MongoDB 分片(待补充)
备份与恢复
mongodump -h dbhost -d dbname -o dbdirectorymongorestore -h dbhost -d dbname --directoryperdb dbdirectory
监控
mongostat 和mongotop
MongoDB 原子操作
mongodb不支持事务,所以,在你的项目中应用时,要注意这点。无论什么设计,都不要要求mongodb保证数据的完整性。
但是mongodb提供了许多原子操作,比如文档的保存,修改,删除等,都是原子操作。
所谓原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。
原子操作命令
MongoDB ObjectId
ObjectId 是一个12字节 BSON 类型数据,有以下格式:
- 前4个字节表示时间戳
- 接下来的3个字节是机器标识码
- 紧接的两个字节由进程id组成(PID)
- 最后三个字节是随机数。
MongoDB备份
非主节点都不具备写入能力。
主从复制模式
mongod启动默认dbpath是当前根目录下的mongodb/db目录,需要手动创建,若不存在启动可能会失败。可复制多分mongodb实例测试。
-- 启动主库monogd --dbpath="../db" -port=27017 --master-- 启动从库monogd --dbpath="../db" --port=8888 --slave --source=127.0.0.1:12707 -- 添加已启动的mongod 从库,假设端口5555,使用mongo链接mongo 127.0.0.1:5555use localdb.sources.insert({"host":"127.0.0.1:27017"})db.sources.find()
注册用复制启动成功后,从备库查询报错:not master and slaveOk=false。解决办法:从mongo客户端执行 db.getMongo().setSlaveOk()
。
副本集模式
与主从复制的区别:
- 没有特定的主数据库
- 如果主数据库宕机,集群中会推选一个从数据库作为主数据库顶上,具备自动恢复能力。
- 集群中包含一个仲裁节点,集群中数据库数目最好为奇数(包含仲裁数据库),方便仲裁。
配置示例1(假设replSet的名称为myrep):
-- mongod实例1,端口2222mongod --port=2222 --dbpath="../db" --replSet myrep/127.0.0.1:3333-- mongod实例2,端口3333mongod --port=3333 --dbpath="../db" --replSet myrep/127.0.0.1:2222-- 初始化副本集,mongo 127.0.0.1:2222db.initiate({"_id":"myrep","members":[{"_id":1,"host":"127.0.0.1:2222"},{"_id":2,"host":"127.0.0.1:3333"}]});--添加仲裁节点mongo --port=4444 -dbpath="../db" --repSet myrep/127.0.0.1:2222-- 只能在primary节点上操作db.addArb("127.0.0.1:4444")
- MongoDB快速入门
- mongoDB快速入门
- MongoDB快速入门笔记
- mongodb快速入门
- MongoDB快速入门
- MongoDB快速入门
- mongodb快速入门
- MongoDB快速入门
- MongoDB快速入门
- mongodb快速入门
- Mongodb快速入门
- mongoDB C# 驱动快速入门
- NoSQL Mongodb的快速入门
- NodeJS中的MongoDB快速入门
- NodeJS中的MongoDB快速入门
- MongoDB快速入门(Mac)
- 主流NOSQL数据库之MongoDB快速入门
- Windows下MongoDB的快速入门
- 工厂模式(简单工厂模式、工厂方法模式)
- 存储过程和存储函数
- CodeForces 527C:Glass Carving (set与multiset应用)
- 原生获取节点(父子兄弟)
- 软件生命周期
- MongoDB快速入门
- 基于SSM或者SSH的三种单元测试方式
- 文章标题
- 51nod 1117 聪明的木匠
- LintCode python 小白-简单题-627最长回文串
- android开源库---Dagger2入门学习(为什么使用)
- 【C语言】C语言实现动态通讯录
- cardview向下兼容API21以下
- hdu 6040 Hints of sd0061(STL)