记一次MongoDB的基本操作
MongoDB是非关系型数据库;NoSql (Not Only Sql) ; 不仅仅是SQL.
MongoDB的优势
1 : MongoDB每个文档对象都会有默认ObjectId类型的 _id
2 : MongoDB 的文档不需要设置相同的字段,每个文档field可以不相同
3 : 同的字段不需要相同的数据类型
谈下MongoDB中 _id
ObjectId 是"_id" 的默认类型。它设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它。这是MongoDB 采用ObjectId,而不是其他比较常规的做法(比如自动增加的主键)的主要原因,因为在多个服务器上同步自动增加主键值既费力还费时。ObjectId 使用12 字节的存储空间,每个字节两位十六进制数字,是一个24 位的字符串。
MongoDB中数据类型
常用的MongoDB操作
查询指定字段: db.getCollection('user').find({'sex':'女'},{'name':1,'age':1,,phone:1,'_id':0})
条件查询 : db.getCollection('user').find({sex:"女"}) 类似于Sql语句中: select * from user where sex = '女'
分组查询 : db.getCollection('user').aggregate([{$group : {_id : "$sex", 'name' : {$push : '$name'}}}]) 类似于SQL中
SELECT GROUP_CONCAT(`name`) AS userName,sex FROM `user` GROUP BY sex
插入操作 : db.getCollection('user').insert({name:'lisi',age:18}) 类似于 sql 语句
INSERT INTO `user` (NAME,age,sex) VALUES('lisi',18,'男')
删除操作 : db.getCollection('user').remove({age:18}) 类似于sql 中:
DELETE FROM `user` WHERE age = 18
分页查询 : db.getCollection('user').find({}).skip(0).limit(5) 类似于sql中:
SELECT * FROM `user` LIMIT 0,5
排序 : db.getCollection('user').find({}).sort(‘age’:-1)( -1:降序;1:升序) 这里需要注意的是 : skip(),limit(),sort() 三个在一起执 行的时候;先执行的sort();然后再执行skip()。
更新操作 : db.getCollection('user').update({'name':'hahaha'},{$set:{'age':25.1}}); 这里也需要注意 : updateOne()为更新满足条件的第一个文档. update说明:update(参数1,参数2,参数3,参数4)
参数一: update的查询条件
参数二: 指定需要更新的字段
参数三 : 可选,存在符合条件的进行更新,否则进行插入操作,默认false,不插入
参数四 :可选,默认false,只更新符合条件的第一条记录,如果为true,则更新所有符合条件的记录
MongoDB中常用的条件查询操作:
$gte:db.getCollection('user').find({'age':{'$gte':18}}) 大于等于
$lte:db.getCollection('user').find({'age':{'$lte':18}}) 小于等于
$in: db.getCollection('user').find({'age':{'$in':[18,20,25]}}) in查询
$gt:大于
$lt:小于
$ne:不等于
$eq:等于
条件查询联合使用:
db.getCollection('user').find({"age": {$gt:18}, $or: [{"name": "hahaha"},{"sex": "男"}]})
分组聚合查询:
db.getCollection('user').aggregate(
[{$match:{}},–-match:查询条件{$group:{'_id':'$sex','avg':{'$avg':'$age'}}}])
--group 分组 '_id':'$sex'按照性别分组 'avg':{'$avg':'$age'} 求age平均值 avg为别名
MongoDB中创建索引:
普通索引 : db.getCollection('user').ensureIndex({'name':1}) name字段创建索引,1为正序,-1为倒序
唯一索引 : db.getCollection('user').ensureIndex({'name':1})
查看索引 : db.user.getIndexes()