mongo基本操作

前言

  搞后台本地调试的时候总是需要看看数据库对不对,所以就有需要使用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"
    }
  }
]
View Code

  

   如此导入了五条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里面的条件,尚未搞懂,搞懂了再写上来。

 

 

 

posted @ 2017-08-27 22:41  liangchangqing  阅读(463)  评论(0编辑  收藏  举报