1、安装:下载tgz压缩包后解压可直接使用(注意区分版本,下面是linux版本)
http://www.runoob.com/mongodb/mongodb-linux-install.html
2、作为服务器启动服务:
在解压后目录的bin目录中有多个脚本,mongod为启动对外服务的脚本。默认27017端口。linux下数据库文件默认存储路径/data/db/,可以使用--dbpath在运行时修改该路径
./mongod
./mongod --dbpath /home/zhangsuosheng/data/
3、作为客户端连接服务
命令行连接
//连接MongoDB并指定端口 mongo 192.168.1.100:27017 //连接到指定的MongoDB数据库 mongo 192.168.1.100:27017/test //指定用户名和密码连接到指定的MongoDB数据库(登录) mongo 192.168.1.200:27017/test -u user -p password
命令行常用命令
help 帮助
show dbs 显示所有数据库
use [数据库名] 切换到指定数据库
show collections 显示数据库内所有集合
db.[集合名].find() 显示集合内所有文档
其他命令:
查询age = 22的记录
db.userInfo.find({"age": 22});
查询age > 22的记录
db.userInfo.find({age: {$gt: 22}});
查询age < 22的记录
db.userInfo.find({age: {$lt: 22}});
查询age >= 25的记录
db.userInfo.find({age: {$gte: 25}});
查询age <= 25的记录
db.userInfo.find({age: {$lte: 25}});
查询age >= 23 并且 age <= 26
db.userInfo.find({age: {$gte: 23, $lte: 26}});
查询name中包含 mongo的数据
db.userInfo.find({name: /mongo/});
查询name中以mongo开头的
db.userInfo.find({name: /^mongo/});
查询指定列name、age数据
db.userInfo.find({}, {name: 1, age: 1});
当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。
查询指定列name、age数据, age > 25
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
按照年龄排序
升序:db.userInfo.find().sort({age: 1});
降序:db.userInfo.find().sort({age: -1});
查询name = zhangsan, age = 22的数据
db.userInfo.find({name: 'zhangsan', age: 22});
查询前5条数据
db.userInfo.find().limit(5);
查询10条以后的数据
db.userInfo.find().skip(10);
查询在5-10之间的数据
db.userInfo.find().limit(10).skip(5);
可用于分页,limit是pageSize,skip是第几页*pageSize
or 查询
db.userInfo.find({$or: [{age: 22}, {age: 25}]});
查询第一条数据
db.userInfo.findOne();
db.userInfo.find().limit(1);
查询某个结果集的记录条数
db.userInfo.find({age: {$gte: 25}}).count();
如果要返回限制之后的记录数量,要使用count(true)或者count(非0)
db.users.find().skip(10).limit(5).count(true);
按照某列进行排序
db.userInfo.find({sex: {$exists: true}}).count();
可视化连接工具:robomongo(robo3t)
下载,解压缩后直接使用
https://robomongo.org/
4、ORM——mongoengine
文档:
http://docs.mongoengine.org/guide/querying.html
连接:
connect( db='DMS_gaze', username='houzhe', password='houzhe', host='172.16.30.205', port=27017, )
定义一个表(collection):
from mongoengine import * class Persons(Document): # mapping into a collection pid = StringField(required=True, unique=True) sex = BooleanField(required=True) #True means male and False means female class Index(Document): #img_id <-> pid img_id = IntField(required=True, unique=True) person = ReferenceField(Persons,reverse_delete_rule=CASCADE) cam_num = IntField(required=True) class PriImageUrls(Document): #primal images img = ReferenceField(Index,reverse_delete_rule=CASCADE) #img_id url = StringField(required=True, unique=True)
ReferenceField为外键
如果以Persons表为外键创建一个Index表(上面黄底色),则创建一条Index类型的文档时则需要传入一个Persons对象作为初始化参数
如果同时设置reverse_delete_rule=CASCADE,则一个Persons对象被从Persons集合中删除时,其对应的Index对象会自动被删除(外键约束)
创建一个文档
a_new_person=Persons(pid=pid,sex=True)
a_new_person.save()
过滤文档(返回值类型为QueryDict,列表)
query_result_person_list=Persons.objects() # 获取Persons集合中的所有文档
query_result_person_list=Persons.objects(pid=222) # 获取Persons集合中pid=222的文档
多条件过滤文档
query_result_left_gaze_label_list=LeftGazeLabel.objects(Q(lo__gt=minlo) & Q(lo__lt=maxlo) & Q(la__gt=minla) & Q(la__lt=maxla))
下面为常用的查询操作符,使用 字段加双下划线加操作符名的方式使用这些操作符,如上面红字所示
Q()&Q()&Q()使用多条件查询,如上面黄底色所示
删除一个文档(不需要save)
query_result_person_list=Persons.objects(pid=222)
query_result_person_list[0].delete()
更新一个文档(不需要save)
query_result_person_list=Persons.objects(pid=222)
query_result_person_list[0].update(sex=False)