1. 安装

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.9.tgz 下载最新版本
tar -zxvf mongodb-linux-x86_64-4.0.9.tgz 解压源码
mv mongodb-linux-x86_64-4.0.9 ../mongodb 进入目录
vim /etc/profile source /etc/profile 配置

2. 配置说明

启动方式:

mongod --dbpath=/data/db  --port=27017  --fork --logpath=/home/logs/mongodb/mongod.log
dbpath = /data/db
logpath = /data/db/mongod.log
logappend = true
bind_ip = 0.0.0.0
port = 27017
fork = true

开启服务:mongod -f mongodb.conf 关闭服务:mongod -f mongodb.conf --shutdown

3. 存贮关系

数据库、集合、文档相当于mysql中数据库、表、记录的关系

4. 命令

1.数据库

1、创建数据库

use DATABASE_NAME
use runoob
db
db.runoob.insert({"name":"菜鸟教程"})

2、删除数据库

db.dropDatabase()
2.集合

1、创建集合

db.createCollection(name, options)
db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
db.mycol2.insert({"name" : "菜鸟教程"}) #插入记录自动创建mycol2集合
字段 类型 描述
capped 布尔 (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。
autoIndexId 布尔 (可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size 数值 (可选)为固定集合指定一个最大值(以字节计)。如果 capped 为 true,也需要指定该字段。
max 数值 (可选)指定固定集合中包含文档的最大数量。

在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。 2、删除集合

db.collection.drop()
db.mycol2.drop()
2.文档

1、插入文档

db.COLLECTION_NAME.insert(document)
db.col.insert([{title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库',by: '菜鸟教程',url: 'http://www.runoob.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 100},{title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库',by: '菜鸟教程',url: 'http://www.runoob.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 100}])
db.col.insert([{},{}]) #插入多个
db.collection.insertOne({"a": 3})
db.collection.insertMany([{"b": 3}, {'c': 4}])

2、更新文档

db.collection.update(<query>,<update>,{upsert: <boolean>,multi: <boolean>,writeConcern: <document>})
db.collection.save(<document>,{writeConcern: <document>})    //以下实例中我们替换了 _id 为 56064f89ade2f21f36b03136 的文档数据:

3、删除文档

db.collection.remove(<query>,{justOne: <boolean>,writeConcern: <document>})
db.col.remove({"title":"mongodb"},{"justOne":true})   //db.col.deleteMany({ status : "A" }) |db.col.deleteOne( { status: "D" } )
db.col.remove({}) //删除所有数据 |db.col.deleteMany({})
db.repairDatabase() //回收磁盘空间
db.runCommand({ repairDatabase: 1 }) //回收磁盘空间

4、查询文档

db.collection.find(query, projection)
db.col.find().pretty()
db.col.find({"likes":{$lte:50}}).pretty()
db.col.find({key1:value1, key2:value2}).pretty()  //and
db.col.find({$or: [{key1: value1}, {key2:value2}]}).pretty() //or
db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
db.col.find({title:/教/})
db.col.find({title:/^教/})
db.col.find({title:/教$/})
db.col.find({"title" : {$type : 'string'}})
db.COLLECTION_NAME.find().limit(NUMBER)
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

db.COLLECTION_NAME.find().sort({KEY:1})
操作 格式 范例 RDBMS中的类似语句
等于 {<key>:<value>} db.col.find({"by":"菜鸟教程"}).pretty() where by = '菜鸟教程'
小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50

5、索引

db.collection.createIndex(keys, options)
db.col.createIndex({"title":1,"description":-1})
字段 类型 描述
background Boolean 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。
unique Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
name string 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
expireAfterSeconds integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
v index version 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
weights document 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
default_language string 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
language_override string 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.

6、聚合

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])   //等同于下
select by_user, count(*) from mycol group by by_user
表达式 描述 实例
$sum 计算总和。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg 计算平均值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min 获取集合中所有文档对应值得最小值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max 获取集合中所有文档对应值得最大值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push 在结果文档中插入值到一个数组中。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 在结果文档中插入值到一个数组中,但不创建副本。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 根据资源文档的排序获取第一个文档数据。 db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 根据资源文档的排序获取最后一个文档数据 db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

7、备份与恢复
mongodb操作命令: mongodump -h 192.168.0.171:5000 -d game -o ./back 导出 mongodump -h 192.168.0.171:5000 -o /data/wwwroot/jpoa.ifanspoker.com/tmp/backmongo 导出

mongorestore -h localhost:27017 -d game ./game 导入 mongorestore -h localhost:27017 /备份位置

8、ObjectId
ObjectId 是一个12字节 BSON 类型数据,有以下格式:

前4个字节表示时间戳
接下来的3个字节是机器标识码
紧接的两个字节由进程id组成(PID)
最后三个字节是随机数。
MongoDB中存储的文档必须有一个"_id"键。这个键的值可以是任何类型的,默认是个ObjectId对象。
在一个集合里面,每个文档都有唯一的"_id"值,来确保集合里面每个文档都能被唯一标识。
MongoDB采用ObjectId,而不是其他比较常规的做法(比如自动增加的主键)的主要原因,因为在多个 服务器上同步自动增加主键值既费力还费时。

newObjectId = ObjectId()
ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()
new ObjectId().str

results matching ""

    No results matching ""

    results matching ""

      No results matching ""