命令 | 作用 |
---|---|
show dbs | 查看所有数据库,不会显示没有数据的数据库 |
db | 查看当前所在数据库 |
use 数据库名 | 创建/切换数据库,若该集合名不存在则会先创建一个再进入这个集合 |
db.dropDatebase() | 删除当前数据库 |
db.creatCollection(“集合名”,options) | 创建集合,option中的{capped:true,size:10}, 参数capped默认值为false表示不设置上限,true为设置上限。当capped为true时,需要设置size参数,单位为字节 |
db.集合名.drop() | 删除集合 |
show collections | 显示当前数据库所有集合 |
db.集合名.insert({“键1”:“值1”,“键2”:“值2”}) | 插入文档,可以以_id:123的形式设置_id,若不设置就会自动生成一个_id。若_id已存在会报错 |
db.集合名.save({“键1”:“值1”,“键2”:“值2”}) | 同上,若_id已存在会覆盖原数据 |
db.集合名.update({原数据键:原数据值},{新数据键:新数据值}) | 更新数据,但是可能会丢失数据(把匹配的条目全部替换成新的条目) |
db.集合名.update({原数据键:原数据值},{$set:{新数据键:新数据值}}) | 更新数据,指挥改变条目的匹配部分,其余部分不变 |
db.集合名.update({原数据键:原数据值},{$set:{新数据键:新数据值}},{multi:true}) | 更新全部,multi 必须是在$存在的时候才会生效 |
db.集合名.remove({条件}) | 删除文档,默认是删除所有符合条件的文档。若不添加条件则会删除所有文档。可添加{justOne:true}来删除一条符合符合条件的文档。给remove一个空字典会删除所有文档 |
db.集合名.count() | 计算文档个数 |
db.集合名.distinct(“age”) | 显示分组种类 , db.test.dinstinct(“age”,{“age”:{$gt:24}}) :增加条件下的种类 |
备份和恢复 | |
mongodump -h dbhost -d dbname -o dbdirectory (回到bin目录下输入) | 数据备份 -h:服务器地址 -d:需要备份的数据库名称 -o:备份数据的存放位置 |
mongorestore -h dbhost -d dbname -dir dbdirectory (回到bin目录下输入) | 恢复数据,名字可以重新取一个,不一定要和原来一样 |
管道 | |
db.集合名词.aggregate(管道:{表达式}) | |
$group $group对应的字典中有几个键,输出结果也会有几个,取不同字段用 $字段名 表示 | 将集合中的文档分组,可用于统计结果 如:db.test.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{_id:"age"}}) 当把_id = null时,就是统计整个文档 |
$match | 过滤数据,只输出符合条件的文档 |
$project | 修改输入文档的结构,如重命名,增加删除字段,创建计算结果等 |
$sort | 将输入的文档排序后输出 |
$limit | 限制聚合管道返回的文档数 |
$skip | 跳过指定数量的文档,并返回剩下的文档 |
$upwind | 将数组字段的类型进行拆分 ,即若键值对的值是一个列表的话,可以分成键和列表中的各元素一一对应的一堆键值对 |
$upwind添加属性保证null可以存在 | db.test.aggregate({KaTeX parse error: Expected 'EOF', got '}' at position 11: upwind:"键"}̲ 或 {upwind:{path:“键”,preserveNullAndEmptyArrays}}) |
管道中的表达式 | |
$键名 | 在管道的字典中表示该键 |
$sum | 计算求和 $ sum:1 如:db.test.aggregate($ group:{_id:"$ age",count:{$sum:1}}) ( $ 符号左右没有空格,因为网页显示问题加的) |
$avg | 计算平均值 |
$max | 获取最小值 |
$min | 获取最大值 |
$push | 在结果文档中插入值到一个数组中 |
$first | 根据资源文档的排序获取第一个文档的数据 |
last | 获取最后一个文档的数据 |
高级查找 | |
db.集合名.find() | 显示该集合内的所有数据 |
db.集合名.find({‘age’:18}) | 增加条件,查找年龄为18岁的条目 |
db.集合名.find({‘age’:18},{‘sex’:‘f’}) | 多个条件,用 , 连接 表示and |
db.集合名.find({$or:[{条件1},{条件2}]}) | 多个条件,先写$or,再在后面的列表中添加条件,条件之间用 ,隔开 |
比较运算符 db.集合名.find({‘age’:{$lt:18}}) ,查找年龄小于18岁的 | 大于: gt ,小于:lt , 大于等于: gte ,小于等于:lte , 不等于: ne |
db.集合名.find({‘age’:{$in:[1,2,3]}}) | $in 查找在后面的列表中的某个元素的项目 |
db.集合名.find({“键”:/正则表达式/} 或{“键”:{$regex:“正则”}}) | 如 db.test.find({“name”:{$regex:"^abc"}}) 查找name以abc开头的文档 |
db.集合名.find().limit(2) | 查找前2个 |
db.集合名.find().skip(3) | 跳过前3个, db.集合名.find().skip(3).limit(2) :联用,跳过前3个查找2个 (先skip后limit更快,可用于翻页,若一页20条数据,limit(20)即可) |
db.集合名.find({$where:function(){return this.age<=25}}) | 在where后面写一个函数 |
db.find().sort({‘age’:1}) 从小到大排序 | 按年龄排序 db.find().sort({‘age’:-1})就可以降序排列(从大到小) |
db.find({},{“name”:1,_id:0}) | 投影,不显示_id,显示name (用1或0表示显示或不显示) |
db.find().count() | 计算个数 |
数据类型 | |
object id | 文档id,保证每个文档的唯一性。_id 是一个16进制数,前4给是当前的时间戳,接下来3给是机器id,接下来2给是mongodb的服务器进程id,最后3个是简单增量 |
string | 字符串,必须是有限的utf-8 |
Boolean | 储存一个布尔值,true或false ,mongodb 的bool都是小写的 |
Integer | 整数可以时32位或64位 |
Double | 储存浮点值 |
Arrays | 数组或列表,多个值储存到一个键 |
Timestamp | 时间戳 ,表示1970-1-1到现在的总秒数 |
Date | 储存当前日期或时间的UNIX时间格式 |
------------- | |
for(i=0;i<10;i++)(db.集合名.insert({name:“test”+i,age:i})) | 再终端中批量添加10调数据 (还是用pymongo直接导入一整个字典列表方便一点) |
db.索引名.ensureIndex({“属性1”:1,“属性2”:2},{“unique”:1}) | 给某个属性(或多个属性)标上索引,1表示升序,-1表示降序,注意Index的I是大写。锁定unique属性之后如果这个字段出现一样的值就会报错(用于去重,不会插入重复的内容) |
db.索引名.find({属性1:""}).explain(“excutionStats”) | 查看信息,包括运行时间,对比建立索引前后的查询速度发现变快了 |
mongodb
最新推荐文章于 2022-05-05 23:06:44 发布