数据库操作:
show dbs;#查看数据库
use test;#如果没有就创建一个
db;#查看当前数据库
db.dropDatabase();#删除数据库
数据操作
创建集合 db.stu.insert({}) 没有自动创建
更新
db.student.update({"name":"张三"},{"name":"张三丰"});#如果有多条语句,只修改第一条,会覆盖原有数据
db.student.update({"22":"女"},{"name":"张三丰"});
db.student.update({"name":"张三"},{$set:{"name":"张无忌"}});#只想改某个key的value使用set
db.student.update({"name":"王五"},{$set:{"name":"张无忌"}},{multi:true});#把所有的记录都改了
参数说明:
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
删除
db.student.remove({});#删除所有数据
db.student.remove({"22":"女"});#按照条件删除
查看
db.stu.find()
db.stu.find({key1:value1,key2:value2}) #AND逻辑
db.stu.find({$or:[{key1:value1},{key2,value2}]})
db.stu.find({$or:[{name:"fakered"},{"age":{$gt:20}}]}) #OR逻辑
db.stu.find(key1:value1) #等于
db.stu.find({"age":{$gte:20}}) #大于等于
db.stu.find({"age":{$lte:20}}) #小于等于
db.stu.find({"age":{$ne:50}}) #不等于
type 操作符
do.stu.find({"title":{$type:2}}) 获取title为string的数据
skip,limit
先skip再limit
数据量大时尽量避免使用skip
b.test.sort({"amount":1}).skip(100000).limit(10) //183ms
db.test.find({amount:{$gt:2399927}}).sort({"amount":1}).limit(10) //53ms
排序
db.stu.find().sort({age:1}) 正序
db.stu.find().sort({age:-1}) 倒序
索引
db.COLLECTION_NAME.ensureIndex(keys[,options])
查看索引
db.COLLECTION_NAME.getIndexes()
db.COLLECTION_NAME.totalIndexSize()查看索引大小
db.system.indexes.find() 查看所有索引
db.COLLECTION_NAME.dropIndex("INDEX-NAME") 删除索引
聚合函数
db.stu.aggregate([{$group:{_id:null,max:{$max:"$age"}}}]) #求最大值
db.stu.aggregate([{$group:{_id:null,sum:{$sum:"$age"}}}]) #求总和
python 操作mongodb
client=MongoClient("mongodb://localhost:27017")
db=client.saku
sub=db.stu
循环插入数据
for(int i=0;i<1000;i++)
{db.test.insert({name:"faker"+i,age:i})
}