MongoDB 概念解析
Sql |
mongoDB |
解释说明 |
Database |
Database |
数据库 |
Table |
Collection |
数据库表/集合 |
Row |
Document |
数据记录行/文档 |
Column |
Field |
数据字段/域 |
Index |
Index |
索引 |
Table joins |
|
表链接,mongo不支持 |
Primary key |
Primary key |
主键,mongo 默认_id为主键 |
MongoDB 比较符
操作 |
格式 |
范例 |
Sql |
等于 |
{‘key’:num} |
Db.collection_name.find({‘key’:num}) |
Where key = num |
小于 |
{‘key’:{$lt:num}} |
Db.collection_name.find({‘key’:{$lt:num}}) |
Where key < num |
小于或等于 |
{‘key’:{$lte:num}} |
Db.collection_name.find({‘key’:{$lte:num}}) |
Where key <= num |
大于 |
{‘key’:{$gt:num}} |
Db.collection_name.find({‘key’:{$gt:num}}) |
Where key > num |
小于或等于 |
{‘key’:{$gte:num}} |
Db.collection_name.find({‘key’:{$gte:num}}) |
Where key >= num |
不等于 |
{‘key’:{$ne:num}} |
Db.collection_name.find({‘key’:{$ne:num}}) |
Where key != num |
MongoDB and、or
#and
<query>:{‘key1’:’value’,’key2’:’value2’}
#or
<query>:$or:[{‘key1’:’value’},{’key2’:’value2’}]
#or+and
<query>:{‘key1’:’value’,’key2’:’value2’},$or:[{‘key3’:’value3’},{’key4’:’value4’}]
创建数据库
#创建数据库(进入数据库)
Use database_name
#查看所在数据库
Db
#添加数据,使数据库持久化
Db.database_name.insert({‘key’:’value’})
#显示所有数据库
Show dbs
Ps1:如果只创建没有数据,不会在所有数据显示。
删除数据库
#显示所有数据库
Show dbs
#进入数据库
Use database_name
#删除数据库
Db.dropDatabase()
删除集合
Db.collection.drop()
插入文档
#定义bean对象
Document=({
‘key’:’value’,
‘key2’:’value2’
})
#插入文档
Db.collection_name.insert(document)
Ps1:save()方法如果指定_id会更新指定_id的数据
#单独插入一条文档(3.2)
Var document = Db.collection_name.insertOne({‘key’:’value’})
#显示插入是否成功及id
document
#批量插入文档(3.2)
Var res = Db.collection_name.insertMany([{‘one’:1},{’tow’:2}])
#显示插入是否成功及数组的id
res
更新文档
Db.collection_name.update(
<query>,
<update>,
{
upsert:<boolean>,
multi:<boolean>,
writeConcern:<boolean>
}
)
query: update的查询条件,类似sql update查询内where后面的。
update: update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert: 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi: 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern:可选,抛出异常的级别。
#只更新第一个匹配的文档
Db.collection_name.update({‘key’:’value’},{$set:{‘new_key’:’new_value’}},)
#更新所有匹配的文档
Db.collection_name.update({‘key’:’value’},{$set:{‘new_key’:’new_value’}},false,true)
#若无匹配数据则添加
Db.collection_name.update({‘key’: ’value’}{$set:{‘new_key’:’new_value’}},true,false)
#更新一条语句(3.2)
Db.collection_name.updateOne({‘key’:’value’}{$set:{‘new_key’:’new_value’}})
#更新多条语句(3.2)
Db.collection_name.updateMany({‘key’: ’value’}{$set:{‘new_key’:’new_value’}})
删除文档
Db.collection_name.remove(
<query>,
{
justOne:<boolean>,
writeConcern:<boolean>
}
)
justOne: (可选)如果设为 true 或 1,则只删除一个文档。
#删除文档(过时)
Db.collection_name.remove({‘key’:’value’})
#删除集合内所有文档
Db.collection_name.deleteMany({})
#删除集合内所有匹配key:vlaue的文档
Db.collection_name.deleteMany({‘key’:’value’})
#删除集合内第一个匹配key:vlaue的文档
Db.collection_name.deleteOne({‘key’:’value’})
查询文档
Db.collection_name.find(<query>)
#查询所有文档
Db.collection_name.find()
#查询单个文档
Db.collection_name.findOne()
#美化文档
Db.collection_name.find().pertty()
$type操作符
类型 |
数字 |
备注 |
Double |
1 |
数值类型 |
String |
2 |
字符串类型 |
Object |
3 |
对象类型 |
Array |
4 |
数组类型 |
Binary data |
5 |
二进制对象 |
Boolean |
8 |
布尔 |
Date |
9 |
日期 |
Null |
10 |
空 |
Limit()方法和Skip()方法(分页)
#limit同sql中的limit,限制查询数量
Db.collection_name.find().limit(1)
#skip方法表示跳过多少条数据
Db.collection_name.find().limit(1).skip(1) #跳过一条数据并且只读取一条数据
Sort()方法(排序)
#limit同sql中的limit,限制查询数量
Db.collection_name.find().sort({‘key’:1})
Pa:1为升序,-1为降序。
索引
ensureIndex()方法
Db.collection_name.ensureIndex({‘key’:1})
参数 |
类型 |
描述 |
Background |
Boolean |
是否阻塞数据库创建索引(false) |
Unique |
Boolean |
是否唯一索引(false) |
Name |
String |
索引名称 |
dropDups |
Boolean |
是否删除重复 |
Sparse |
Boolean |
是否有空数据索引 |
Weights |
Document |
权重 1-999 |
聚合
aggregate()方法
Db.collection_name.aggregate(aggregate_type)
表达式 |
描述 |
实例 |
$sun |
计算总和 |
Db.collection_name.aggregate($group:{_id:null,count:{$sum:1}}) |
$avg |
计算平均值 |
Db.collection_name.aggregate($group:{_id:null,avg:{$avg:’key’}}) |
$min |
计算最小值 |
|
$max |
计算最大值 |
|
$push |
结果变数组 |
|
$addToSet |
|
|
$first |
获取第一个文档 |
|
$last |
获取最后一个文档 |
|
复制
暂时不用
分片
暂时不用
备份
暂时不用