Fork me on GitHub
Suzf  Blog

MongoDB 基本查询

License: Attribution-NonCommercial-ShareAlike 4.0 International

本文出自 Suzf Blog。 如未注明,均为 SUZF.NET 原创。

转载请注明:http://suzf.net/post/357

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()

 

「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」

Suzf Blog

(๑>ڡ<)☆ 谢谢 ~

使用微信扫描二维码完成支付