CentoOS7安装MongoDb

安装

#官网下载mongodb	http://www.mongodb.org/downloads
#安装mongodb
[root@de9f15cd4e56 ~]# tar -zxvf mongodb-linux-x86_64-3.4.23.tgz 
[root@de9f15cd4e56 ~]# mkdir /usr/local/mongodb
[root@de9f15cd4e56 ~]#  mv mongodb-linux-x86_64-3.4.23 /usr/local/mongodb
[root@de9f15cd4e56 ~]# cd /usr/local/mongodb/mongodb-linux-x86_64-3.4.23/
[root@de9f15cd4e56 mongodb-linux-x86_64-3.4.23]# mv * /usr/local/mongodb/
[root@de9f15cd4e56 mongodb-linux-x86_64-3.4.23]# ll
total 184
drwxr-xr-x 2 root root  4096 Sep 25 01:52 bin
-rw-r--r-- 1 root root 34520 Sep 12 16:10 GNU-AGPL-3.0
-rw-r--r-- 1 root root 16726 Sep 12 16:10 MPL-2
-rw-r--r-- 1 root root  2266 Sep 12 16:10 README
-rw-r--r-- 1 root root 57021 Sep 12 16:10 THIRD-PARTY-NOTICES
-rw-r--r-- 1 root root 63592 Sep 12 16:11 THIRD-PARTY-NOTICES.gotools
[root@de9f15cd4e56 mongodb-linux-x86_64-3.4.23]# mkdir /usr/local/mongodb/data
[root@de9f15cd4e56 mongodb-linux-x86_64-3.4.23]# mkdir /usr/local/mongodb/log

#启动Mongodb使用mongod命令建立一个mongodb数据库链接,端口号设置为10001,数据库的路径为/usr/local/mongodb/data,日志路径为/usr/local/mongodb/log/mongo.log
mongodb的启动程序放在后台执行,下面命令执行后,按ctrl+c;mongodb的默认端口为27017
[root@de9f15cd4e56 mongodb]# nohup /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/log/mongo.log &
[root@de9f15cd4e56 mongodb]# ps -ef|grep mongodb
root     153592 135976  0 02:07 pts/0    00:00:00 /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/log/mongo.log
root     153629 135976  0 02:08 pts/0    00:00:00 grep --color=auto mongodb
[root@de9f15cd4e56 mongodb]# netstat -tunlp|grep 153592
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      153592/mongod  
[root@de9f15cd4e56 mongodb]# lsof -i:27017
COMMAND    PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
mongod  153592 root    8u  IPv4 788162485      0t0  TCP *:27017 (LISTEN)


#为了更方便的启动和关闭MongoDB,我们可以使用Shell写脚本,当然也可以加入到service中
更好的方式是采用配置文件,把MongoDB需要的参数写入配置文件,然后在脚本中引用;
[root@de9f15cd4e56 mongodb]# vim /etc/profile
#添加如下行
export PATH=$PATH:/usr/local/mongodb/bin/
[root@de9f15cd4e56 mongodb]# source /etc/profile

#配置启动项
[root@de9f15cd4e56 mongodb]# vim mongodb.conf
#代表端口号,如果不指定则默认为27017
port=27017
#MongoDB数据文件目录
dbpath=/usr/local/mongodb/data
#MongoDB日志文件目录
logpath=/usr/local/mongodb/log/mongo.log
#日志文件自动累加
logappend=true

#编写启动脚本
[root@de9f15cd4e56 mongodb]# vim /etc/init.d/mongodb
#!/bin/bash
#
# mongod        Start up the MongoDB server daemon
#
   
# source function library
. /etc/rc.d/init.d/functions
#定义命令
CMD=/usr/local/mongodb/bin/mongod
#定义配置文件路径
INITFILE=/usr/local/mongodb/mongodb.conf
start()
{
    #&表示后台启动,也可以使用fork参数
    $CMD -f $INITFILE &
    echo "MongoDB is running background..."
}
   
stop()
{
    pkill mongod
    echo "MongoDB is stopped."
}
   
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    *)
        echo $"Usage: $0 {start|stop}"
esac
[root@de9f15cd4e56 mongodb]#  chmod 755 /etc/init.d/mongodb
[root@de9f15cd4e56 mongodb]# /etc/init.d/mongodb status
Usage: /etc/init.d/mongodb {start|stop}
#如果报错/etc/rc.d/init.d/functions: No such file or directory执行下面命令
[root@de9f15cd4e56 mongodb]# yum install initscripts
#脚本停止mongodb
[root@de9f15cd4e56 mongodb]# systemctl stop mongodb
[root@de9f15cd4e56 mongodb]# lsof -i:27017
[1]+  Done                    nohup /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/log/mongo.log
[root@de9f15cd4e56 mongodb]# ps -ef |grep mongodb
root     154036 135976  0 02:30 pts/0    00:00:00 grep --color=auto mongodb
#脚本启动mongodb
[root@de9f15cd4e56 mongodb]# systemctl start mongodb
[root@de9f15cd4e56 mongodb]# lsof -i:27017
COMMAND    PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
mongod  154053 root    8u  IPv4 788173082      0t0  TCP *:27017 (LISTEN)
[root@de9f15cd4e56 mongodb]# ps -ef |grep mongodb
root     154053      1 16 02:30 ?        00:00:00 /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongodb.conf
root     154079 135976  0 02:31 pts/0    00:00:00 grep --color=auto mongodb

shell连接Mongo服务

[root@de9f15cd4e56 mongodb]# mongo
MongoDB shell version v3.4.23
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.23
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
	http://docs.mongodb.org/
Questions? Try the support group
	http://groups.google.com/group/mongodb-user
Server has startup warnings: 
2019-09-25T02:30:59.124+0000 I CONTROL  [initandlisten] 
2019-09-25T02:30:59.124+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-09-25T02:30:59.124+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2019-09-25T02:30:59.125+0000 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2019-09-25T02:30:59.125+0000 I CONTROL  [initandlisten] 
2019-09-25T02:30:59.125+0000 I CONTROL  [initandlisten] 
2019-09-25T02:30:59.125+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2019-09-25T02:30:59.125+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2019-09-25T02:30:59.125+0000 I CONTROL  [initandlisten] 
2019-09-25T02:30:59.125+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2019-09-25T02:30:59.125+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2019-09-25T02:30:59.125+0000 I CONTROL  [initandlisten] 
> help
	db.help()                    help on db methods
	db.mycoll.help()             help on collection methods
	sh.help()                    sharding helpers
	rs.help()                    replica set helpers
	help admin                   administrative help
	help connect                 connecting to a db help
	help keys                    key shortcuts
	help misc                    misc things to know
	help mr                      mapreduce

	show dbs                     show database names
	show collections             show collections in current database
	show users                   show users in current database
	show profile                 show most recent system.profile entries with time >= 1ms
	show logs                    show the accessible logger names
	show log [name]              prints out the last segment of log in memory, 'global' is default
	use <db_name>                set current database
	db.foo.find()                list objects in collection foo
	db.foo.find( { a : 1 } )     list objects in foo where a == 1
	it                           result of the last line evaluated; use to further iterate
	DBQuery.shellBatchSize = x   set default number of items to display on shell
	exit                         quit the mongo shell
> exit

配置MongoDb的权限参考:https://blog.csdn.net/qq_23536449/article/details/98479769

MongoDb的常用操作命令

1)登陆退出....
mongo 命令直接加MongoDB服务器的IP地址就可以利用 Mongo 的默认端口号(27017)登陆 Mongo,然后便能够进行简单的命令行操作。至于退出,直接 exit,然后回车就好了。
#在mongodb服务器上
[root@de9f15cd4e56 mongodb]# mongo
[root@de9f15cd4e56 mongodb]# mongo 127.0.0.1:27017
#在某台机器上,这台机器上要有mongodb的环境变量
[root@master-node ~]# mongo 192.168.1.123:27017
如果是连接某个库,命令是
[root@master-node ~]# mongo ip:port/库名 -u用户名 -p密码
#连接上mongodb后就可以查看mongodb的帮助
>help


DB的操作命令
a.列出所有数据库
> show dbs

b.切换数据库并查看库下面的集合
> use local
switched to db local
> show collections
startup_log

c.创建数据库
> use zhouning
switched to db zhouning
#此时还没创建成功
> show dbs
admin  0.000GB
local  0.000GB
#插入一条记录试试看
> db.zhouning.insert({"name":"testdb"})
WriteResult({ "nInserted" : 1 })
#再次查看数据库创建成功了
> show dbs
admin     0.000GB
local     0.000GB
zhouning  0.000GB

d.删除数据库
> db.dropDatabase()
{ "dropped" : "zhouning", "ok" : 1 }
> show dbs
admin  0.000GB
local  0.000GB

e.查看当前数据库
> db
zhouning
> db.getName()
zhouning

f.修复当前数据库
> db.repairDatabase()
{ "ok" : 1 }

g.查看当前数据库的状态
> db.stats()
{
	"db" : "zhouning",
	"collections" : 1,
	"views" : 0,
	"objects" : 1,
	"avgObjSize" : 39,
	"dataSize" : 39,
	"storageSize" : 16384,
	"numExtents" : 0,
	"indexes" : 1,
	"indexSize" : 16384,
	"ok" : 1
}

h.查看当前db的版本
>  db.version()
3.4.23

i.查看当前db的连接机器地址
> db.getMongo()
connection to 127.0.0.1:27017

j.从指定的机器上复制指定数据库数据到某个数据库
> db.copyDatabase("zhouning", "test", "127.0.0.1");
{ "ok" : 1 }

集合级别的操作
1.创建collection
> db.createCollection("Hello")
{ "ok" : 1 }
> show collections
Hello
zhouning

直接向不存在的collection插入数据也会创建集合
> db.hello2.insert({"name":"daning"})
WriteResult({ "nInserted" : 1 })
> show collections
Hello
hello2
zhouning

2.删除collection
> db.hello2.drop()
true #true成功,false没成功
> show collections;
Hello
zhouning
> db.hello2.drop()
false #不存在了删除失败

3.重命名collection
> show collections;
Hello
zhouning
> 
> db.Hello.renameCollection("Halou")
{ "ok" : 1 }
> show collections;
Halou
zhouning

4.在collection上建立索引:,建立对 ID 字段的索引,1 代表升序。
> db.Halou.ensureIndex({ID:1})
{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

记录级别的操作
A.往user集合插入两条记录
> db.user.insert({'name':'GalGadot','gender':'female','age':28,'salary':11000})
WriteResult({ "nInserted" : 1 })
> db.user.insert({'name':'Mikie Hara','gender':'female','age':26,'salary':7000})
WriteResult({ "nInserted" : 1 })

使用save也可以完成类似的操作
> db.user.save({'name':'Wentworth Earl Miller','gender':'male','age':41,'salary':33000})
WriteResult({ "nInserted" : 1 })

查询
查找集合中的所有记录
> db.user.find()
{ "_id" : ObjectId("5d8add12783b2c1487bd582b"), "name" : "GalGadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5d8add37783b2c1487bd582c"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }
{ "_id" : ObjectId("5d8add56783b2c1487bd582d"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }
查找集合中的符合条件的记录
查找age为26的数据
> db.user.find({"age":26})
{ "_id" : ObjectId("5d8add37783b2c1487bd582c"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }
查找salary大于7000的数据
> db.user.find({salary:{$gt:7000}})
{ "_id" : ObjectId("5d8add12783b2c1487bd582b"), "name" : "GalGadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5d8add56783b2c1487bd582d"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }
查找name包含ent的数据
> db.user.find({name:/ent/})
{ "_id" : ObjectId("5d8add56783b2c1487bd582d"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }
查询 name 以 G 打头的数据
> db.user.find({name:/^G/})
{ "_id" : ObjectId("5d8add12783b2c1487bd582b"), "name" : "GalGadot", "gender" : "female", "age" : 28, "salary" : 11000 }
查询 name 以 t 结尾的数据
> db.user.find({name:/t$/})
{ "_id" : ObjectId("5d8add12783b2c1487bd582b"), "name" : "GalGadot", "gender" : "female", "age" : 28, "salary" : 11000 }

查询 age 小于 30,salary 大于 7000 的数据
> db.user.find({age:{$lt:30},salary:{$gt:7000}})
{ "_id" : ObjectId("5d8add12783b2c1487bd582b"), "name" : "GalGadot", "gender" : "female", "age" : 28, "salary" : 11000 }

查询 age 小于 30,或者 salary 大于 10000 的记录
> db.user.find({$or:[{salary:{$gt:10000}},{age:{$lt:30}}]})
{ "_id" : ObjectId("5d8add12783b2c1487bd582b"), "name" : "GalGadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5d8add37783b2c1487bd582c"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }
{ "_id" : ObjectId("5d8add56783b2c1487bd582d"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }

查询符合条件的第一条记录
> db.user.findOne({age:{$lt:30},salary:{$gt:7000}})
{
	"_id" : ObjectId("5d8add12783b2c1487bd582b"),
	"name" : "GalGadot",
	"gender" : "female",
	"age" : 28,
	"salary" : 11000
}

查询 user 集合中所有记录的 name,age,salary,sex_orientation 字段
> db.user.find({},{name:1,age:1,salary:1,sex_orientation:true})
{ "_id" : ObjectId("5d8add12783b2c1487bd582b"), "name" : "GalGadot", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5d8add37783b2c1487bd582c"), "name" : "Mikie Hara", "age" : 26, "salary" : 7000 }
{ "_id" : ObjectId("5d8add56783b2c1487bd582d"), "name" : "Wentworth Earl Miller", "age" : 41, "salary" : 33000 }
注意:这里的 1 表示显示此列的意思,也可以用 true 表示。
> db.user.find({},{name:1,age:1,salary:true,sex_orientation:1})
{ "_id" : ObjectId("59328c8aa7865327915046ae"), "name" : "GalGadot", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("59328c9da7865327915046af"), "name" : "Mikie Hara", "age" : 26, "salary" : 7000 }
{ "_id" : ObjectId("59328cd6a7865327915046b0"), "name" : "Wentworth Earl Miller", "age" : 41, "salary" : 33000 }

查询指定字段的数据,并去重
> db.user.distinct('gender')
[ "female", "male" ]

方便的显示记录
> db.user.find().pretty()
{
	"_id" : ObjectId("5d8add12783b2c1487bd582b"),
	"name" : "GalGadot",
	"gender" : "female",
	"age" : 28,
	"salary" : 11000
}
{
	"_id" : ObjectId("5d8add37783b2c1487bd582c"),
	"name" : "Mikie Hara",
	"gender" : "female",
	"age" : 26,
	"salary" : 7000
}
{
	"_id" : ObjectId("5d8add56783b2c1487bd582d"),
	"name" : "Wentworth Earl Miller",
	"gender" : "male",
	"age" : 41,
	"salary" : 33000
}

查询结果集中的前三条记录
> db.user.find().limit(3)
{ "_id" : ObjectId("5d8add12783b2c1487bd582b"), "name" : "GalGadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5d8add37783b2c1487bd582c"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }
{ "_id" : ObjectId("5d8add56783b2c1487bd582d"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }

查询第一条以后的所有数据
> db.user.find().skip(1)
{ "_id" : ObjectId("5d8add37783b2c1487bd582c"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }
{ "_id" : ObjectId("5d8add56783b2c1487bd582d"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }

查询跳过2条后的所有数据
> db.user.find().skip(2)
{ "_id" : ObjectId("5d8add56783b2c1487bd582d"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }

按某个字段升序查询
>  db.user.find().sort({salary:1})
{ "_id" : ObjectId("5d8add37783b2c1487bd582c"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }
{ "_id" : ObjectId("5d8add12783b2c1487bd582b"), "name" : "GalGadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5d8add56783b2c1487bd582d"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }

按某个字段降序查询
> db.user.find().sort({salary:-1})
{ "_id" : ObjectId("5d8add56783b2c1487bd582d"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }
{ "_id" : ObjectId("5d8add12783b2c1487bd582b"), "name" : "GalGadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5d8add37783b2c1487bd582c"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }

统计记录中的总条数
> db.user.find().count()
3

统计满足条件的总条数
> db.user.find({$or: [{salary: {$lt:4000}}, {salary: {$gt:10000}}]}).count()
2

删除
删除所有记录
> db.zhouning.remove({})
WriteResult({ "nRemoved" : 1 })
mongo在删除数据的时候不支持 all * 全部删除选择{}就可以全部删除了
删除mongodb集合中的数据可以使用remove()函数。remove()函数可以接受一个查询文档作为可选参数来有选择性的删除符合条件的文档。
remove()函数不会删除集合本身,同时,原有的索引也同样不会被删除。
删除文档是永久性的,不能撤销,也不能恢复的。因此,在执行remove()函数前先用find()命令来查看下是否正确,是个比较好的习惯啦。

删除符合条件的记录
> db.user.remove({name:'GalGadot'})
WriteResult({ "nRemoved" : 1 })
> db.user.find()
{ "_id" : ObjectId("5d8add37783b2c1487bd582c"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }
{ "_id" : ObjectId("5d8add56783b2c1487bd582d"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }

删除集合中符合条件的一条记录
> db.user.remove({salary :{$lt:30000}},1)
WriteResult({ "nRemoved" : 1 })
> db.user.find()
{ "_id" : ObjectId("5d8add56783b2c1487bd582d"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }
当然,也可以是命令:db.user.remove({salary :{$lt:30000}},true),因为true和1是一个意思


更新操作
db.collection.update(criteria,objNew,upsert,multi)
criteria:update的查询条件,类似sql update查询内where后面的
objNew:update 的对象和一些更新操作符(如$,$inc...)等,也可以理解为 sql update 查询内 set 后面的。
upsert: 如果不存在update的记录,是否插入objNew,true为插入,默认false,不插入
multi: mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把匹配criteria条件的记录都更新掉

> db.user.find()
{ "_id" : ObjectId("59328cd6a7865327915046b0"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }
{ "_id" : ObjectId("593293e2a7865327915046b2"), "name" : "GalGadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("593293f0a7865327915046b3"), "name" : "Gasdfdst", "gender" : "female", "age" : 58, "salary" : 60000 }
{ "_id" : ObjectId("59329401a7865327915046b4"), "name" : "huihui", "gender" : "female", "age" : 18, "salary" : 23100 }
更新name为"huihui"的所有记录,如果不存在不做插入
> db.user.update({name:'huihui'},{$set:{age:23}},false,true)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find()
{ "_id" : ObjectId("59328cd6a7865327915046b0"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }
{ "_id" : ObjectId("593293e2a7865327915046b2"), "name" : "GalGadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("593293f0a7865327915046b3"), "name" : "Gasdfdst", "gender" : "female", "age" : 58, "salary" : 60000 }
{ "_id" : ObjectId("59329401a7865327915046b4"), "name" : "huihui", "gender" : "female", "age" : 23, "salary" : 23100 }

更新名称为'lfqy1'的所有记录,如果不存在插入记录
> db.user.update({name:'lfqy1'},{$set:{age:23}},true,true)
WriteResult({
	"nMatched" : 0,
	"nUpserted" : 1,
	"nModified" : 0,
	"_id" : ObjectId("5d8b083fe09443517f99b47e")
})
> db.user.find()
{ "_id" : ObjectId("59328cd6a7865327915046b0"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }
{ "_id" : ObjectId("593293e2a7865327915046b2"), "name" : "GalGadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("593293f0a7865327915046b3"), "name" : "Gasdfdst", "gender" : "female", "age" : 58, "salary" : 60000 }
{ "_id" : ObjectId("59329401a7865327915046b4"), "name" : "huihui", "gender" : "female", "age" : 23, "salary" : 23100 }
{ "_id" : ObjectId("5d8b083fe09443517f99b47e"), "name" : "lfqy1", "age" : 23 }

4.4.2 增值更新
> db.user.find()
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }
{ "_id" : ObjectId("5245610881c83a5bf26fc285"), "age" : 23, "name" : "lfqy1" }
{ "_id" : ObjectId("52455f8925e437dfea8fd4fd"), "age" : 23, "gender" : "male", "interest" : "NBA", "name" : "lfqy", "salary" : 1 }
{ "_id" : ObjectId("5245607525e437dfea8fd4fe"), "age" : 23, "gender" : "male", "interest" : "NBA", "name" : "lfqy", "salary" : 2 }
 
> db.user.update({gender:'female'},{$inc:{salary:50}},false,true)
 
> db.user.find()
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11050 }
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7050 }
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }
{ "_id" : ObjectId("5245610881c83a5bf26fc285"), "age" : 23, "name" : "lfqy1" }
{ "_id" : ObjectId("52455f8925e437dfea8fd4fd"), "age" : 23, "gender" : "male", "interest" : "NBA", "name" : "lfqy", "salary" : 1 }
{ "_id" : ObjectId("5245607525e437dfea8fd4fe"), "age" : 23, "gender" : "male", "interest" : "NBA", "name" : "lfqy", "salary" : 2 }
关于更新操作(db.collection.update(criteria, objNew, upsert, multi )),要说明的 是,如果 upsert 为 true,那么在没有找到符合更新条件的情况下,mongo 会在集合中插入 一条记录其值满足更新条件的记录(其中的字段只有更新条件中涉及的字段,字段的值满足 更新条件),然后将其更新(注意,如果更新条件是$lt 这种不等式条件,那么 upsert 插入
 
--------------------------------------------------------------------------------------
其它命令操作:
1、创建一个聚集集合(table)
db.createCollection(“collName”, {size: 20, capped: 5, max: 100});//创建成功会显示{“ok”:1}
//判断集合是否为定容量db.collName.isCapped();
 
2、得到指定名称的聚集集合(table)
db.getCollection("account");
 
3、得到当前db的所有聚集集合
db.getCollectionNames();
 
4、显示当前db所有聚集索引的状态
db.printCollectionStats();
 
三、用户相关
1、添加一个用户
db.addUser("name");
db.addUser("userName", "pwd123", true); 添加用户、设置密码、是否只读
 
2、数据库认证、安全模式
db.auth("userName", "123123");
 
3、显示当前所有用户
show users;
 
4、删除用户
db.removeUser("userName");
 
四、聚集集合查询
1、查询所有记录
db.userInfo.find();
相当于:select* from userInfo;
默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize= 50;这样每页就显示50条记录了。
 
2、查询去掉后的当前聚集集合中的某列的重复数据
db.userInfo.distinct("name");
会过滤掉name中的相同数据
相当于:select distict name from userInfo;
 
3、查询age = 22的记录
db.userInfo.find({"age": 22});
相当于: select * from userInfo where age = 22;
 
4、查询age > 22的记录
db.userInfo.find({age: {$gt: 22}});
相当于:select * from userInfo where age >22;
 
5、查询age < 22的记录
db.userInfo.find({age: {$lt: 22}});
相当于:select * from userInfo where age <22;
 
6、查询age >= 25的记录
db.userInfo.find({age: {$gte: 25}});
相当于:select * from userInfo where age >= 25;
 
7、查询age <= 25的记录
db.userInfo.find({age: {$lte: 25}});
 
8、查询age >= 23 并且 age <= 26
db.userInfo.find({age: {$gte: 23, $lte: 26}});
 
9、查询name中包含 mongo的数据
db.userInfo.find({name: /mongo/});
//相当于%%
[code]select * from userInfo where name like ‘%mongo%';
 
10、查询name中以mongo开头的
db.userInfo.find({name: /^mongo/});
select * from userInfo where name like ‘mongo%';
 
11、查询指定列name、age数据
db.userInfo.find({}, {name: 1, age: 1});
相当于:select name, age from userInfo;
当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。
 
12、查询指定列name、age数据, age > 25
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age >25;
 
13、按照年龄排序
升序:db.userInfo.find().sort({age: 1});
降序:db.userInfo.find().sort({age: -1});
 
14、查询name = zhangsan, age = 22的数据
db.userInfo.find({name: 'zhangsan', age: 22});
相当于:select * from userInfo where name = ‘zhangsan' and age = ‘22';
 
15、查询前5条数据
db.userInfo.find().limit(5);
相当于:selecttop 5 * from userInfo;
 
16、查询10条以后的数据
db.userInfo.find().skip(10);
相当于:select * from userInfo where id not in (
selecttop 10 * from userInfo
);
 
17、查询在5-10之间的数据
db.userInfo.find().limit(10).skip(5);
 
可用于分页,limit是pageSize,skip是第几页*pageSize
 
18、or与 查询
db.userInfo.find({$or: [{age: 22}, {age: 25}]});
相当于:select * from userInfo where age = 22 or age = 25;
 
19、查询第一条数据
db.userInfo.findOne();
相当于:selecttop 1 * from userInfo;
db.userInfo.find().limit(1);
 
20、查询某个结果集的记录条数
db.userInfo.find({age: {$gte: 25}}).count();
相当于:select count(*) from userInfo where age >= 20;
 
21、按照某列进行排序
db.userInfo.find({sex: {$exists: true}}).count();
相当于:select count(sex) from userInfo;
 
五、索引
1、创建索引
db.userInfo.ensureIndex({name: 1});
db.userInfo.ensureIndex({name: 1, ts: -1});
 
2、查询当前聚集集合所有索引
db.userInfo.getIndexes();
 
3、查看总索引记录大小
db.userInfo.totalIndexSize();
 
4、读取当前集合的所有index信息
db.users.reIndex();
 
5、删除指定索引
db.users.dropIndex("name_1");
 
6、删除所有索引索引
db.users.dropIndexes();
 
六、修改、添加、删除集合数据
1、添加
db.users.save({name: ‘zhangsan', age: 25, sex: true});
添加的数据的数据列,没有固定,根据添加的数据为准
 
2、修改
db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
相当于:update users set name = ‘changeName' where age = 25;
db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
相当于:update users set age = age + 50 where name = ‘Lisi';
db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
相当于:update users set age = age + 50, name = ‘hoho' where name = ‘Lisi';
 
3、删除
db.users.remove({age: 132});
 
4、查询修改删除
db.users.findAndModify({
    query: {age: {$gte: 25}},
    sort: {age: -1},
    update: {$set: {name: 'a2'}, $inc: {age: 2}},
    remove: true
});
db.runCommand({ findandmodify : "users",
    query: {age: {$gte: 25}},
    sort: {age: -1},
    update: {$set: {name: 'a2'}, $inc: {age: 2}},
    remove: true
});
 
update 或 remove 其中一个是必须的参数; 其他参数可选。
参数    详解     默认值
query    查询过滤条件    {}
sort    如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作    {}
remove    若为true,被选中对象将在返回前被删除    N/A
update    一个 修改器对象
N/A
new    若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。    false
fields    参见Retrieving a Subset of Fields (1.5.0+)
All fields
upsert    创建新对象若查询结果为空。 示例 (1.5.4+)
false
 
 
七、语句块操作
1、简单Hello World
print("Hello World!");
这种写法调用了print函数,和直接写入"Hello World!"的效果是一样的;
 
2、将一个对象转换成json
tojson(new Object());
tojson(new Object('a'));
 
3、循环添加数据
> for (var i = 0; i < 30; i++) {
... db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
... };
 
这样就循环添加了30条数据,同样也可以省略括号的写法
> for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
 
也是可以的,当你用db.users.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;
 
4、find 游标查询
> var cursor = db.users.find();
> while (cursor.hasNext()) {
    printjson(cursor.next());
}
这样就查询所有的users信息,同样可以这样写
var cursor = db.users.find();
while (cursor.hasNext()) { printjson(cursor.next); }
同样可以省略{}号
 
5、forEach迭代循环
db.users.find().forEach(printjson);
forEach中必须传递一个函数来处理每条迭代的数据信息
 
6、将find游标当数组处理
var cursor = db.users.find();
cursor[4];
取得下标索引为4的那条数据
既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();
那样我们也可以用循环显示数据
 
for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);
 
7、将find游标转换成数组
> var arr = db.users.find().toArray();
> printjson(arr[2]);
 
用toArray方法将其转换为数组
 
8、定制我们自己的查询结果
只显示age <= 28的并且只显示age这列数据
db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);
db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson);
 
排除age的列
db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson);
 
9、forEach传递函数显示信息
db.things.find({x:4}).forEach(function(x) {print(tojson(x));});
 
八、其他
1、查询之前的错误信息
db.getPrevError();
 
2、清除错误记录
db.resetError();
 
查看聚集集合基本信息
1、查看帮助  db.yourColl.help();
2、查询当前集合的数据条数  db.yourColl.count();
3、查看数据空间大小 db.userInfo.dataSize();
4、得到当前聚集集合所在的db db.userInfo.getDB();
5、得到当前聚集的状态 db.userInfo.stats();
6、得到聚集集合总大小 db.userInfo.totalSize();
7、聚集集合储存空间大小 db.userInfo.storageSize();
8、Shard版本信息  db.userInfo.getShardVersion()
9、聚集集合重命名 db.userInfo.renameCollection("users"); 将userInfo重命名为users
10、删除当前聚集集合 db.userInfo.drop();
 
show dbs:显示数据库列表
show collections:显示当前数据库中的集合(类似关系数据库中的表)
show users:显示用户
use <db name>:切换当前数据库,这和MS-SQL里面的意思一样
db.help():显示数据库操作命令,里面有很多的命令
db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令
db.foo.find():对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据)
db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值