对于关系型数据库,存储数据的时候须要提早建表建库,随着数据的复杂度愈来愈高,所建的表的数量也愈来愈多;可是非关系型却不须要.程序员
sudo apt-get install -y mongodb-org https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
sudo mongod --config /etc/mongod.conf &
位置:https://docs.mongodb.com/manual/introduction/web
每一个⽂档都有⼀个属性, 为_id, 保证每一个⽂档的惟⼀性正则表达式
能够⾃⼰去设置_id插⼊⽂档,若是没有提供, 那么MongoDB为每一个⽂档提供了⼀个独特的_id, 类型为objectIDsql
objectID是⼀个12字节的⼗六进制数,每一个字节两位,一共是24 位的字符串: 前4个字节为当前时间戳 接下来3个字节的机器ID 接下来的2个字节中MongoDB的服务进程id 最后3个字节是简单的增量值mongodb
db.集合名称.insert(document)shell
db.stu.insert({name:'gj',gender:1}) db.stu.insert({_id:"20170101",name:'gj',gender:1})
插⼊⽂档时, 若是不指定_id参数, MongoDB会为⽂档分配⼀个惟⼀的ObjectId数据库
命令:db.集合名称.save(document)
若是⽂档的_id已经存在则修改, 若是⽂档的_id不存在则添加json
命令:db.集合名称.find()
ubuntu
命令:db.集合名称.update(<query> ,<update>,{multi: <boolean>})
数组
db.stu.update({name:'hr'},{name:'mnc'}) 更新一条 db.stu.update({name:'hr'},{$set:{name:'hys'}}) 更新一条 db.stu.update({},{$set:{gender:0}},{multi:true}) 更新所有
注意:"multi update only works with $ operators"
命令:db.集合名称.remove(<query>,{justOne: <boolean>})
⽅法find(): 查询
db.集合名称.find({条件⽂档})
⽅法findOne():查询,只返回第⼀个
db.集合名称.findOne({条件⽂档})
⽅法pretty(): 将结果格式化
db.集合名称.find({条件⽂档}).pretty()
可使用如下数据进行练习
{"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true } {"name" : "⻩蓉", "hometown" : "桃花岛", "age" : 18, "gender" : false } {"name" : "华筝", "hometown" : "蒙古", "age" : 18, "gender" : false } {"name" : "⻩药师", "hometown" : "桃花岛", "age" : 40, "gender" : true } {"name" : "段誉", "hometown" : "⼤理", "age" : 16, "gender" : true } {"name" : "段王爷", "hometown" : "⼤理", "age" : 45, "gender" : true } {"name" : "洪七公", "hometown" : "华⼭", "age" : 18, "gender" : true }
$lt (less than)
$lte (less than equal)
$gt (greater than)
$gte
不等于:$ne
例如:
查询年龄大于18的全部学生 db.stu.find({age:{$gte:18}})
逻辑运算符主要指与、或逻辑
and:在json中写多个条件便可
查询年龄⼤于或等于18, 而且性别为true的学⽣ db.stu.find({age:{$gte:18},gender:true})
or:使⽤$or, 值为数组, 数组中每一个元素为json
查询年龄⼤于18, 或性别为false的学⽣ db.stu.find({$or:[{age:{$gt:18}},{gender:false}]}) 查询年龄⼤于18或性别为男⽣, 而且姓名是郭靖 db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})
使⽤$in
, $nin
判断数据是否在某个数组内
查询年龄为1八、 28的学⽣ db.stu.find({age:{$in:[18,28,38]}})
使⽤//或$regex编写正则表达式
查询sku以abc开头的数据 db.products.find({sku:/^abc/}) 查询sku以789结尾的数据 db.products.find({sku:{$regex:'789$'}})
{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." } { "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" } { "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before line" } { "_id" : 103, "sku" : "xyz789", "description" : "Multiple\nline description" }
⽅法limit(): ⽤于读取指定数量的⽂档
db.集合名称.find().limit(NUMBER) 查询2条学⽣信息 db.stu.find().limit(2)
⽅法skip(): ⽤于跳过指定数量的⽂档
db.集合名称.find().skip(NUMBER) db.stu.find().skip(2)
同时使用
db.stu.find().limit(4).skip(5) 或 db.stu.find().skip(5).limit(4)
注意:先使用skip在使用limit的效率要高于前者
因为mongo的shell是一个js的执行环境 使⽤$where后⾯写⼀个函数, 返回满⾜条件的数据
查询年龄⼤于30的学⽣ db.stu.find({ $where:function() { return this.age>30;} })
在查询到的返回结果中, 只选择必要的字段
命令:db.集合名称.find({},{字段名称:1,...})
参数为字段与值, 值为1表示显示, 值为0不显 特别注意: 对于_id列默认是显示的, 若是不显示须要明确设置为0
db.stu.find({},{_id:0,name:1,gender:1})
⽅法sort(), ⽤于对 集进⾏排序
命令:db.集合名称.find().sort({字段:1,...})
参数1为升序排列 参数-1为降序排列
根据性别降序, 再根据年龄升序 db.stu.find().sort({gender:-1,age:1})
⽅法count()⽤于统计结果集中⽂档条数
命令:db.集合名称.find({条件}).count()
命令:db.集合名称.count({条件})
db.stu.find({gender:true}).count() db.stu.count({age:{$gt:20},gender:true})
⽅法distinct()
对数据进⾏去重
命令:db.集合名称.distinct('去重字段',{条件})
db.stu.distinct('hometown',{age:{$gt:18}})