MongoDB 基本查询
数据库版本
> db.version()
3.0.6
1. show dbs
查看当前主机的所有数据库
db
查看当前所使用的数据库
show collections
查看当前数据库的 collection == show tables
** 如何查看帮助 **
> help
如果想知道当前数据库支持哪些方法
> db.help();
如果想知道当前数据库下的表或者表collection支持哪些方法,可以使用一下命令如:
> db.user.help(); user为表名
2. use cherry
切换数据库, 如果数据库不存在则新创建数据库[ 隐示创建数据库 ]
3. db.user.save({"name":"jack", age:21, "sex":"male"});
user这个表也会隐式的被创建,并且插入一条文档 ,文档有name,age,sex。下面我们在用另外一种方法插入一条数据。
删除表
> db.user.drop();
True
4. db.user.insert({"name":"tom", age:19, "sex":"male"});
在user中插入数据,可能你会问insert和save有什么不同,他们还真的有点不同!
insert仅仅是插入文档到集合中,如果记录不存在则插入,如果记录存在则忽略
** save是在文档不存在时插入,存在时则是更新 **
5. db.user.find();
这个可以查询user集合中所有的数据。所有的文档都有_Id这一列,这个是主键,是系统生成唯一的主键,不过我们也可以自己来操作,不过自己操作的时候可千万不能有重复的值,要不会有异常。
6. db.user.findOne();
这个查询user集合中最上面一条数据并显示。
7. db.user.find({name:"jack"});
查询name是jack的文档。
8. db.user.update({name:"tom"}, {$set:{name:"Jim"}});
修改名称tom为Jim,这个是修改的方法。
9. db.user.remove({name:"Jim"});
这个是删除name为Jim!
这些都是最最基本的增删改查了,下面将重点讲解查询!
10. 条件操作符< 、<=、>、>=
db.user.find({age:{$gt:20}});
查询年龄大于12岁的用户,如此的还有$lt小于、$gte大于等于、$lte小于等于。
11. $all匹配所有
db.user.find({age:{$all:[21]}});
他会匹配所有age等于21的文档。
12. $exists判断字段是否存在
db.user.find({age:{$exists:true}});
查询所有存在age字段的文档。false表示不存在。
13. $mod取模运算
db.user.find({age:{$mod:[10, 1]}});
查询所有age模10等于1的文档。
14. $ne不等于
db.user.find({age: {$ne : 20}});
查询所有年龄不等于20的用户文档。
15. $in包含
db.user.find({age : { $in : [20, 21, 22]}});
查询所有年龄等于20、21、22的用户文档。
16. $nin不包含
db.user.find({age : {$nin : [20, 21, 22]}});
查询所有年龄不等于20、21、22的用户文档。
17. count查询记录条数
db.user.find().count();
返回cherry集合中文档记录的数目。
18. limit限制显示的条数
db.user.find().limit(5);
返回cherry中上面的5条记录。
19. skip限制返回记录的起点
db.user.find().skip(3);
返回cherry中上面数第三条数据一下的所有数据
20. 分页的实现
db.user.find().skip(1).limit(5);
返回从第二条数据开始,显示5条数据,这个可以用作分页,很简单就实现了!
21. sort排序
db.user.find().sort({age:1});
所有的数据按年龄大小升序(asc)排列,既然1表示asc排列,那么-1就表示desc排列,这是真的。
22. distinct去掉重复值
db.user.find().distinct("name");
按name的重复值筛选数据。
根据条件查找数据
-----------------------
通过条件查询: db.foo.find( { x : 77 } , { name : 1 , x : 1 } )
-----------------------------
db.foo.find(...).count()
db.foo.find(...).limit(n) 根据条件查找数据并返回指定记录数
db.foo.find(...).skip(n)
db.foo.find(...).sort(...) 查找排序
db.foo.findOne([query]) 根据条件查询只查询一条数据
db.foo.getDB() get DB object associated with collection 返回表所属的库
db.foo.getIndexes() 显示表的所有索引
db.foo.group( { key : ..., initial: ..., reduce : ...[, cond: ...] } ) 根据条件分组
db.foo.mapReduce( mapFunction , reduceFunction , )
db.foo.remove(query) 根据条件删除数据
db.foo.renameCollection( newName ) renames the collection 重命名表
db.foo.save(obj) 保存数据
db.foo.stats() 查看表的状态
db.foo.storageSize() - includes free space allocated to this collection 查询分配到表空间大小
db.foo.totalIndexSize() - size in bytes of all the indexes 查询所有索引的大小
db.foo.totalSize() - storage allocated for all data and indexes 查询表的总大小
db.foo.update(query, object[, upsert_bool]) 根据条件更新数据
db.foo.validate() - SLOW 验证表的详细信息
db.foo.getShardVersion() - only for use with sharding
1. 超级用户相关:
#增加或修改用户密码
db.addUser('admin','pwd')
#查看用户列表
db.system.users.find()
#用户认证
db.auth('admin','pwd')
#删除用户
db.removeUser('mongodb')
#查看所有用户
show users
#查看所有数据库
show dbs
#查看所有的collection
show collections
#查看各collection的状态
db.printCollectionStats()
#查看主从复制状态
db.printReplicationInfo()
#修复数据库
db.repairDatabase()
#设置记录profiling,0=off 1=slow 2=all
db.setProfilingLevel(1)
#查看profiling
show profile
#拷贝数据库
db.copyDatabase('mail_addr','mail_addr_tmp')
#删除collection
db.mail_addr.drop()
#删除当前的数据库
db.dropDatabase()
2. 客户端连接
/usr/local/mongodb/bin/mongo user_addr -u user -p 'pwd'
3. 增删改
#存储嵌套的对象
db.foo.save({'name':'ysz','address':{'city':'beijing','post':100096},'phone':[138,139]})
#存储数组对象
db.user_addr.save({'Uid':'[email protected]','Al':['[email protected]','[email protected]']})
#根据query条件修改,如果不存在则插入,允许修改多条记录
db.foo.update({'yy':5},{'$set':{'xx':2}},upsert=true,multi=true)
#删除yy=5的记录
db.foo.remove({'yy':5})
#删除所有的记录
db.foo.remove()
4. 索引
增加索引:1(ascending),-1(descending)
db.things.ensureIndex({firstname: 1, lastname: 1}, {unique: true});
#索引子对象
db.user_addr.ensureIndex({'Al.Em': 1})
#查看索引信息
db.deliver_status.getIndexes()
db.deliver_status.getIndexKeys()
#根据索引名删除索引
db.user_addr.dropIndex('Al.Em_1')
5. 查询
查找所有
db.foo.find()
#查找一条记录
db.foo.findOne()
#根据条件检索10条记录
db.foo.find({'msg':'Hello 1'}).limit(10)
#sort排序
db.deliver_status.find({'From':'[email protected]'}).sort({'Dt',-1})
db.deliver_status.find().sort({'Ct':-1}).limit(1)
#count操作
db.user_addr.count()
#distinct操作
db.foo.distinct('msg')
#>操作
db.foo.find({"timestamp": {"$gte" : 2}})
#子对象的查找
db.foo.find({'address.city':'beijing'})
6. 管理
查看collection数据的大小
db.deliver_status.dataSize()
#查看colleciont状态
db.deliver_status.stats()
#查询所有索引的大小
db.deliver_status.totalIndexSize()