小样的个人空间

mongoDB常用查询命令

增删改查操作

查询

1
2
3
4
5
6
7
8
9
10
11
12
13
db.tablename.find({x:1}) //查询x为1的数据
db.tablename.find({m:{$exists:true}}) //查询存在m字段的数据
db.tablename.find().skip(3).limit(2).sort({x:1}) //skip跳过条数,limit限制条数,sort按x升序排序{x:-1}为降序
db.tablename.find({$test:{$search:"aa"}}) //进行查找含有aa的全文查询
db.tablename.find({$test:{$search:"aa bb"}}) //进行查找含有aa或bb的全文查询
db.tablename.find({$test:{$search:"aa bb -cc"}}) //进行查找含有aa或bb或不含有cc的全文查询
db.tablename.find({$test:{$search:"\"aa\" \"bb\" \"cc\""}}) //进行查找含有aa,bb且cc的全文查询
db.tablename.find({$test:{$search:"aa bb"}},{score:{$meta:textScore}}).sort({score:{$meta:textScore}}) //进行查找时,另取出一个score对相似度进行评分,并进行排序
db.tablename.find({area:{$near:[1,1],$maxDistance:10}}) //根据area字段查询距离[1,1]最近的10个点记录
db.tablename.find({area:{$geoWithin:{$box:[[0,0],[3,3]]}}}) //查询矩形[0,0]到[3,3]之间的点
db.tablename.find({area:{$geoWithin:{$center:[[0,0],5]}}}) //查询以[0,0]为圆心5为半径之间的点
db.tablename.find({area:{$geoWithin:{$polygon:[[0,0],[0,1],[1,1],[2,2]]}}}) //查询以polygon中的几个点形成的多边形中的点
db.tablename.find().count() //查询dbname记录数

插入

1
db.tablename.insert({x:2,_id:1}) //插入x为2,_id为1的数据,_id类似主键不可重复

更新

1
2
3
db.tablename.update({x:1},{x:999}) //将x为1的记录更新为x为999
db.tablename.update({x:1},{$set:{x:999}}) //$set为部分更新操作符,假设除了x外还有z,y等则不被覆盖。
db.tablename.update({x:100},{x:999},true) //如果查询的数据不存在,自动插入一条

索引

1
2
3
4
5
6
7
8
9
10
11
12
13
//1.在插入数据前创建索引
db.tablename.getIndexes() //获取表的索引
db.tablename.ensureIndex({x:1}) //创建索引 {x:1}表示升序 {x:-1}表示降序
db.tablename.ensureIndex({x:1,y:1}) //以x,y建立复合索引
db.tablename.ensureIndex({x:1},{name:"normal_index"}) //建立索引并命名为normal_index 删除索引可以使用该名称
db.tablename.ensureIndex({time:1},{expireAfterSeconds:10}) //以time建立过期索引,插入的数据将于10秒后被删除,time必须是isodate不能是时间戳
db.tablename.ensureIndex({key:"text"}) //在tablename这个集合的key字段建立全文索引
db.tablename.ensureIndex({key_1:"text",key_2:"text"}) //以key_1,key_2建立复合全文索引
db.tablename.ensureIndex({"$**":"text"}) //在tablename这个集合的所有字段建立全文索引
db.tablename.dropIndex({x:1})||db.tablename.dropIndex("normal_index") //删除索引
db.tablename.ensureIndex({x:1,y:1},{unique:true}) //建立x,y唯一索引。即x,y均相同的数据无法同时插入
db.tablename.ensureIndex({area:"2d"}) //在tablename这个集合的area字段建立2d索引
db.tablename.ensureIndex({area:"2dsphere"}) //在tablename这个集合的area字段建立2dsphere(球面距离)索引

了解事项

mongo可以使用js语法进行操作,如for(i=3,i<100,i++)db.tablename_collection.insert({x:i})