前言
搞后台本地调试的时候总是需要看看数据库对不对,所以就有需要使用mongo客户端直接查看数据库了。而且我还是很喜欢直接操作数据库的。mongo安装目录D:\mongoDB\bin下面有几个工具:
工具 | 用处 |
mongo.exe | 客户端,支持js语法 |
mongod.exe | 服务端 |
mongodump.exe | 备份工具 |
mongorestore.exe | 恢复工具 |
mongoexport.exe | 导出工具 |
mongoimport.exe | 导入工具 |
mongostat.exe | 实时性能监控工具 |
mongotop.exe | 跟踪MongDB实例读写时间工具 |
环境说明
win10下的mongo数据库。
database操作
查看当前数据库,直接输入show dbs;,如下图有三个数据库,admin数据库是存放管理员信息的数据库用于认证;local是存放replication相关的数据;test数据库随便搞。
新建数据库,直接输入use newdb;,但是如果对新建的数据库newdb不进行操作的话,实际上newdb是不会被创建的。
新建collection,直接输入db.createCollection('phone');,这时数据库newdb才真正创建。
删除当前数据库,直接输入db.dropDatabase();
collection操作
新建collection,直接输入db.createCollection('phone');,上图已经给出。
删除collection,直接输入db.dropCollection('phone');
显示当前数据库的collection,直接输入show tables;
document操作
插入
插入分为db.collectionName.save(date);和db.collectionName.insert(date);。区别在于当默认的“_id”值已存在时,调用insert方法插入会报错;而save方法则是把相同的_id所在行数据的信息替换成save所包含的data信息,这和更新不同。
需要说明的是,这里的data是以json的格式作为参数的,实际上在mongo.exe中document输入输出的形式始终是json格式。
查询
查询表中所有数据:db.collectionName.find();
按条件查询(支持多条件):db.collectionName.find(条件);
查询第一条(支持条件):db.collectionName.findOne(条件);
限制数量:db.collectionName.find().limit(数量);
跳过指定数量:db.collectionName.find().skip(数量);
需要输出好看则再在以上查询中加上:.pretty()
导入数据
在查询之前,我要批量导入一些手机信息数据,这时就需要使用到前言中提到的mongoimport.exe工具,注意导入时要先退出mongo.exe,这个错误网上很多人都在犯所以导入不进去,特此说明。至于具体导入方法可以参考我转载自IT猪的一篇文章http://www.cnblogs.com/liangchangqing/p/7436792.html。以下是我导入的过程,注意json文件里要以数组形式存放每一条要导入的json对象。以下代码是我的phoneInfo.json:
[ { "device" : "iPhone SE", "isSmart" : "true", "releaseTime" : "2016-03-21 10:00:00", "price" : 4999, "apps" : [{"name" : "Safari"}, {"name" : "Map"}, {"name" : "Tinder"}], "manufacturer": { "name" : "Apple", "country" : "The United States" } }, { "device" : "Huawei Mate8", "isSmart" : "true", "releaseTime" : "2015-12-09 10:00:00", "price" : 4988, "apps" : [{"name" : "Alipay"}, {"name" : "CMB"}, {"name" : "NetEase Music"}, {"name" : "Tinder"}, {"name" : "WeChat"}, {"name" : "Gaode Map"}], "manufacturer": { "name" : "Huawei", "country" : "China" } }, { "device" : "Mi Max", "isSmart" : "true", "releaseTime" : "2015-04-17 10:00:00", "price" : 1650, "apps" : [{"name" : "MiChat"}, {"name" : "Didi"}, {"name" : "CMB"}], "manufacturer": { "name" : "Mi", "country" : "China" } }, { "device" : "Samsung S6 Edge", "isSmart" : "true", "releaseTime" : "2015-12-09 10:00:00", "price" : 3850, "apps" : [{"name" : "Taobao"}, {"name" : "Didi"}, {"name" : "Radio"}, {"name" : "360 Camera"}], "manufacturer": { "name" : "Samsung", "country" : "South Korea" } }, { "device" : "Nokia 1000", "isSmart" : "false", "releaseTime" : "2011-08-26 10:00:00", "price" : 200, "apps" : [{"name" : "System Phone"}, {"name" : "Radio"}], "manufacturer": { "name" : "Nokia", "country" : "Finland" } } ]
如此导入了五条json代码里的数据,现在开始按条件查询
比较查询
大于:$gt
小于:$lt
大于等于:$gte
小于等于:$lte
非等于:$ne
单一一个比较条件查询
这是大于小于关系一起查询,如下图
and关系查询$and,比如我要查价钱大于4800,生产厂家是中国华为的手机,如下图:
or关系查询$or
in和not in查询(包含、不包含),$in和$nin
查询数量:db.表名.find().count();
排序:db.表名.find().sort({"字段名":1});
1:表示升序 -1:表示降序
指定字段返回: db.表名.find({},{"字段名":0});
1表示折返回注明为1的字段(但是_id字段还是会默认返回的),0表示返回出标注为0以外的所有字段,1和0不可一起用否则会报错
修改
db.collectionName.update({"条件字段名":"字段值"},{$set:{"要修改的字段名":"修改后的字段值"}});
删除
db.collectionName.remove(条件);
总结
查询中,对于如何查询apps、manufacturer里面的条件,尚未搞懂,搞懂了再写上来。