安装
MongoDB的安装很简单,下载解压即可
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.10.tgz
tar mongodb-linux-x86_64-rhel62-3.2.10
配置
- 新建文件夹及文件,结构目录如下
└── node
├── data
│ └── db
├── log
└── mongodb.conf
- 修改配置文件
vi mongodb.conf
内容如下
# 数据库文件位置
dbpath=/usr/local/mongodb/node/data
# 日志文件位置
logpath=/usr/local/mongodb/node/log/mongod.log
# 以追加方式写入日志
logappend = true
# 是否以守护进程方式运行
fork = true
# 绑定ip
bind_ip = xxxxxxxx
# 默认27017
port = 27000
- 设置环境变量
vi /etc/profile
#MongoDB
export PATH=$PATH:/usr/local/mongodb/mongodb-linux-x86_64-rhel62-3.2.10/bin
source /etc/profile
启动
[root@iZwz9io83xn1czh8rty3qlZ bin]# ./mongod --config /usr/local/mongodb/node/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 4808
child process started successfully, parent exiting
基础操作
连接
[root@iZwz9io83xn1czh8rty3qlZ bin]# ./mongo –host xxxxxxx –port 27000
MongoDB shell version: 3.2.10
connecting to: xxxxxxx:27000/test
Welcome to the MongoDB shell.
创建数据库
> use mongotest
switched to db mongotest
创建Collection
> db.createCollection("test");
插入文档
- 如果Collection -“test”不存在,会自动创建
> db.test.insert({name:"zhangsan"});
WriteResult({ "nInserted" : 1 })
- 支持javascript
> for(var i=0;i<100;i++) db.test.insert({name:"name"+i,age:i});
WriteResult({ "nInserted" : 1 })
> db.test.find();
{ "_id" : ObjectId("582c60cd9d229b42b64bd2cd"), "name" : "zhangsan" }
{ "_id" : ObjectId("582c62a29d229b42b64bd2ce"), "name" : "name0", "age" : 0 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2cf"), "name" : "name1", "age" : 1 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d0"), "name" : "name2", "age" : 2 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d1"), "name" : "name3", "age" : 3 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d2"), "name" : "name4", "age" : 4 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d3"), "name" : "name5", "age" : 5 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d4"), "name" : "name6", "age" : 6 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d5"), "name" : "name7", "age" : 7 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d6"), "name" : "name8", "age" : 8 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d7"), "name" : "name9", "age" : 9 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d8"), "name" : "name10", "age" : 10 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d9"), "name" : "name11", "age" : 11 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2da"), "name" : "name12", "age" : 12 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2db"), "name" : "name13", "age" : 13 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2dc"), "name" : "name14", "age" : 14 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2dd"), "name" : "name15", "age" : 15 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2de"), "name" : "name16", "age" : 16 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2df"), "name" : "name17", "age" : 17 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2e0"), "name" : "name18", "age" : 18 }
Type "it" for more
更新文档
> db.test.update({"_id":ObjectId("582c60cd9d229b42b64bd2cd")},{$set:{name:"zhangsan-update"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find();
{ "_id" : ObjectId("582c60cd9d229b42b64bd2cd"), "name" : "zhangsan-update" }
类似于关系型数据库中
update test set name=’zhangsan-update’ where id=582c60cd9d229b42b64bd2cd;
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新
> db.test.find({name:"zhangsan"});
{ "_id" : ObjectId("582c64379d229b42b64bd332"), "name" : "zhangsan" }
{ "_id" : ObjectId("582c64389d229b42b64bd333"), "name" : "zhangsan" }
> db.test.update({name:"zhangsan"},{$set:{name:"zhangsan-multi"}},{multi:"true"});
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
> db.test.find({name:"zhangsan"});
> db.test.find({name:"zhangsan-multi"});
{ "_id" : ObjectId("582c64379d229b42b64bd332"), "name" : "zhangsan-multi" }
{ "_id" : ObjectId("582c64389d229b42b64bd333"), "name" : "zhangsan-multi" }
查询文档
- 无条件
> db.test.find();
{ "_id" : ObjectId("582c60cd9d229b42b64bd2cd"), "name" : "zhangsan" }
- And
> db.test.find({name:"name18",age:18});
{ "_id" : ObjectId("582c62a29d229b42b64bd2e0"), "name" : "name18", "age" : 18 }
- Or
> db.test.find({$or:[{name:"name18"},{age:19}]});
{ "_id" : ObjectId("582c62a29d229b42b64bd2e0"), "name" : "name18", "age" : 18 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2e1"), "name" : "name19", "age" : 19 }
- 分页
limit:每页数据数量;
skip:跳过多少数据;
> db.test.find().limit(4).skip(3);
{ "_id" : ObjectId("582c62a29d229b42b64bd2d0"), "name" : "name2", "age" : 2 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d1"), "name" : "name3", "age" : 3 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d2"), "name" : "name4", "age" : 4 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d3"), "name" : "name5", "age" : 5 }
> db.test.find().limit(5).skip(4);
{ "_id" : ObjectId("582c62a29d229b42b64bd2d1"), "name" : "name3", "age" : 3 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d2"), "name" : "name4", "age" : 4 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d3"), "name" : "name5", "age" : 5 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d4"), "name" : "name6", "age" : 6 }
{ "_id" : ObjectId("582c62a29d229b42b64bd2d5"), "name" : "name7", "age" : 7 }
函数
> db.test.find({name:"zhangsan-multi"});
{ "_id" : ObjectId("582c64379d229b42b64bd332"), "name" : "zhangsan-multi", "age" : 18 }
{ "_id" : ObjectId("582c64389d229b42b64bd333"), "name" : "zhangsan-multi", "age" : 18 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd334"), "name" : "zhangsan-multi", "age" : 0 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd335"), "name" : "zhangsan-multi", "age" : 1 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd336"), "name" : "zhangsan-multi", "age" : 2 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd337"), "name" : "zhangsan-multi", "age" : 3 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd338"), "name" : "zhangsan-multi", "age" : 4 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd339"), "name" : "zhangsan-multi", "age" : 5 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd33a"), "name" : "zhangsan-multi", "age" : 6 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd33b"), "name" : "zhangsan-multi", "age" : 7 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd33c"), "name" : "zhangsan-multi", "age" : 8 }
- avg
> db.test.aggregate([{$group:{"_id":"$name","avg":{$avg:"$age"}}}])
{ "_id" : "zhangsan-multi", "avg" : 6.545454545454546 }
- sum
> db.test.aggregate([{$group:{"_id":"$name","sum_value":{$sum:"$age"}}}])
{ "_id" : "zhangsan-multi", "sum_value" : 72 }
- max
> db.test.aggregate([{$group:{"_id":"$name","max_value":{$max:"$age"}}}])
{ "_id" : "zhangsan-multi", "max_value" : 18 }
- min
> db.test.aggregate([{$group:{"_id":"$name","min_value":{$min:"$age"}}}])
{ "_id" : "zhangsan-multi", "min_value" : 0 }
排序
1:升序
-1:降序
> db.test.find({name:"zhangsan-multi"}).sort({age:1});
{ "_id" : ObjectId("582c6cf89d229b42b64bd334"), "name" : "zhangsan-multi", "age" : 0 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd335"), "name" : "zhangsan-multi", "age" : 1 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd336"), "name" : "zhangsan-multi", "age" : 2 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd337"), "name" : "zhangsan-multi", "age" : 3 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd338"), "name" : "zhangsan-multi", "age" : 4 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd339"), "name" : "zhangsan-multi", "age" : 5 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd33a"), "name" : "zhangsan-multi", "age" : 6 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd33b"), "name" : "zhangsan-multi", "age" : 7 }
{ "_id" : ObjectId("582c6cf89d229b42b64bd33c"), "name" : "zhangsan-multi", "age" : 8 }
{ "_id" : ObjectId("582c64379d229b42b64bd332"), "name" : "zhangsan-multi", "age" : 18 }
{ "_id" : ObjectId("582c64389d229b42b64bd333"), "name" : "zhangsan-multi", "age" : 18 }
索引
- 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
这种扫描全集合的查询效率是非常低的,特别在处理大量的数据。 - 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false。
> db.test.ensureIndex({name:1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}