设为首页 收藏本站
查看: 1047|回复: 0

[经验分享] MongoDB基础教程[菜鸟教程整理]

[复制链接]

尚未签到

发表于 2017-12-15 15:31:40 | 显示全部楼层 |阅读模式
  MongoDB基础教程
  =======================================================================================================
  1.MongoDB 创建数据库
  > use runoob;
  > db.runoob.insert({"name":"菜鸟教程"});
  > show dbs;
  =======================================================================================================
  2.MongoDB 删除数据库
  > use runoob;
  > db.dropDatabase();
  > show dbs;
  =======================================================================================================
  3.MongoDB 插入文档
  db.COLLECTION_NAME.insert(document);
  > db.col.insert({title: 'MongoDB 教程'});
  > db.col.find();
  > document=({title: 'MongoDB 教程'});
  > db.col.insert(document) or > db.col.save(document);
  =======================================================================================================
  4.MongoDB 更新文档
  db.collection.update(
  <query>,
  <update>,
  {
  upsert: <boolean>,
  multi: <boolean>,
  writeConcern: <document>
  }
  );
  > db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}});
  #以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true.
  > db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true});
  > db.col.find().pretty();
  #只更新第一条记录:
  db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
  #全部更新:
  db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
  #只添加第一条:
  db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
  #全部添加加进去:
  db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
  #全部更新:
  db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
  #只更新第一条记录:
  db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
  =======================================================================================================
  5.MongoDB 删除文档
  db.collection.remove(
  <query>,
  {
  justOne: <boolean>,
  writeConcern: <document>
  }
  );
  > db.col.remove({'title':'MongoDB 教程'});
  #如果你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示:
  > db.COLLECTION_NAME.remove(DELETION_CRITERIA,1);
  #如果你想删除所有数据,可以使用以下方式(类似常规 SQL 的 truncate 命令):
  >db.col.remove({});
  >db.col.find();
  =======================================================================================================
  6.MongoDB 查询文档
  > db.COLLECTION_NAME.find();
  #结构化显示
  > db.col.find().pretty();
  #操作格式范例RDBMS中的类似语句
  等于{<key>:<value>}db.col.find({"by":"菜鸟教程"}).pretty()where by = '菜鸟教程'
  小于{<key>:{$lt:<value>}}db.col.find({"likes":{$lt:50}}).pretty()where likes < 50
  小于或等于{<key>:{$lte:<value>}}db.col.find({"likes":{$lte:50}}).pretty()where likes <= 50
  大于{<key>:{$gt:<value>}}db.col.find({"likes":{$gt:50}}).pretty()where likes > 50
  大于或等于{<key>:{$gte:<value>}}db.col.find({"likes":{$gte:50}}).pretty()where likes >= 50
  不等于{<key>:{$ne:<value>}}db.col.find({"likes":{$ne:50}}).pretty()where likes != 50
  #MongoDB AND 条件
  > db.col.find({key1:value1, key2:value2}).pretty();
  > db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"}).pretty();

  #类似于 WHERE 语句:WHERE by='菜鸟教程' AND>  #MongoDB OR 条件
  > db.col.find(
  {
  $or: [
  {key1: value1}, {key2:value2}
  ]
  }
  ).pretty();
  > db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty();
  #AND 和 OR 联合使用
  > db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty();

  #类似常规 SQL 语句为: 'where likes>50 AND (by = '菜鸟教程' OR>  =======================================================================================================
  7.MongoDB 条件操作符
  #MongoDB (>) 大于操作符 - $gt
  > db.col.find({"likes" : {$gt : 100}});
  #类似于SQL语句:Select * from col where likes > 100;
  #MongoDB(>=)大于等于操作符 - $gte
  > db.col.find({likes : {$gte : 100}});
  #类似于SQL语句:Select * from col where likes >=100;
  #MongoDB (<) 小于操作符 - $lt
  > db.col.find({likes : {$lt : 150}});
  #类似于SQL语句:Select * from col where likes < 150;
  #MongoDB (<=) 小于操作符 - $lte
  > db.col.find({likes : {$lte : 150}});
  #类似于SQL语句:Select * from col where likes <= 150;
  #MongoDB 使用 (<) 和 (>) 查询 - $lt 和 $gt
  > db.col.find({likes : {$lt :200, $gt : 100}})
  #类似于SQL语句:Select * from col where likes>100 AND  likes<200;
  =======================================================================================================
  8.MongoDB $type 操作符
  #$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
  类型数字备注
  Double1
  String2
  Object3
  Array4
  Binary data5
  Undefined6已废弃。

  Object>  Boolean8
  Date9
  Null10
  Regular Expression11
  JavaScript13
  Symbol14
  JavaScript (with scope)15
  32-bit integer16
  Timestamp17
  64-bit integer18
  Min key255Query with -1.
  Max key127
  > db.col.find({"title" : {$type : 2}});
  =======================================================================================================
  9.MongoDB Limit与Skip方法
  > db.col.find({},{"title":1,_id:0}).limit(2);
  #注:如果你们没有指定limit()方法中的参数则显示集合中的所有数据。
  > db.col.find({},{"title":1,_id:0}).limit(1).skip(1);
  #注:skip()方法默认参数为 0。
  =======================================================================================================
  10.MongoDB 排序
  > db.col.find({},{"title":1,_id:0}).sort({"likes":-1});
  #其中 1 为升序排列,而-1是用于降序排列。
  #注: 如果没有指定sort()方法的排序方式,默认按照文档的升序排列。
  =======================================================================================================
  11.MongoDB 索引
  > db.col.ensureIndex({"title":1});
  #1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可.
  > db.col.ensureIndex({"title":1,"description":-1});
  #ensureIndex() 接收可选参数,可选参数列表如下:
  ParameterTypeDescription
  backgroundBoolean建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。
  uniqueBoolean建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
  namestring索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
  dropDupsBoolean在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
  sparseBoolean对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
  expireAfterSecondsinteger指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
  vindex version索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
  weightsdocument索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
  default_languagestring对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
  language_overridestring对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.
  #通过在创建索引时加background:true 的选项,让创建工作在后台执行.
  > db.values.ensureIndex({open: 1, close: 1}, {background: true});
  =======================================================================================================
  12.MongoDB 聚合
  > db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]);
  #类似sql语句: select by_user, count(*) from mycol group by by_user;
  #一些聚合的表达式:
  表达式描述实例
  $sum计算总和。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]);$avg计算平均值db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]);
  $min获取集合所有文档最小值。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]);
  $max获取集合所有文档最大值。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]);
  $push在结果文档中插入值到一个数组中。db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]);
  $addToSet在结果文档中插入值到一个数组中,但不创建副本。db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]);
  $first根据资源文档的排序获取第一个文档数据。db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]);
  $last根据资源文档的排序获取最后一个文档数据db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}]);
  =======================================================================================================
  13.管道的概念
  管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
  MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
  表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
  这里我们介绍一下聚合框架中常用的几个操作:
  $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
  $limit:用来限制MongoDB聚合管道返回的文档数。
  $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  $group:将集合中的文档分组,可用于统计结果。
  $sort:将输入文档排序后输出。
  $geoNear:输出接近某一地理位置的有序文档。
  管道操作符实例
  13.1.$project实例
  db.article.aggregate(
  { $project : {

  >  author : 1 ,
  }}
  );
  这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:
  db.article.aggregate(
  { $project : {
  _id : 0 ,

  >  author : 1
  }});
  13.2.$match实例
  db.articles.aggregate( [
  { $match : { score : { $gt : 70, $lte : 90 } } },
  { $group: { _id: null, count: { $sum: 1 } } }
  ] );
  $match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
  13.3.$skip实例
  db.article.aggregate(
  { $skip : 5 });
  经过$skip管道操作符处理后,前五个文档被"过滤"掉。
  =======================================================================================================
  14.MongoDB 备份(mongodump)与恢复(mongorestore)
  #备份
  >  mongodump -h dbhost -d dbname -o dbdirectory;
  #mongodump 命令可选参数列表如下所示:
  语法描述实例
  mongodump --host HOST_NAME --port PORT_NUMBER该命令将备份所有MongoDB数据mongodump --host w3cschool.cc --port  27017
  mongodump --dbpath DB_PATH --out BACKUP_DIRECTORYmongodump --dbpath /data/db/ --out /data/backup/
  mongodump --collection COLLECTION --db DB_NAME该命令将备份指定数据库的集合。mongodump --collection mycol --db test
  #恢复
  > mongorestore -h <hostname><:port> -d dbname <path>;
  =======================================================================================================
  15.MongoDB 监控
  > mongostat
  > mongotop
  > mongotop 10
  > mongotop --locks//每个数据库的锁的使用
  =======================================================================================================
  16.MongoDB Java
  16.1.连接数据库的Java代码如下:
  import com.mongodb.MongoClient;
  import com.mongodb.client.MongoDatabase;

  public>  public static void main( String args[] ){
  try{   
  // 连接到 mongodb 服务
  MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
  // 连接到数据库
  MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
  System.out.println("Connect to database successfully");
  }catch(Exception e){
  System.err.println( e.getClass().getName() + ": " + e.getMessage() );
  }
  }
  }
  16.2.带驱动编译运行程序,将MongoDB JDBC 启动包 mongo-java-driver-3.2.2.jar 放在本地目录下:
  $ javac -cp .:mongo-java-driver-3.2.2.jar MongoDBJDBC.java
  $ java -cp .:mongo-java-driver-3.2.2.jar MongoDBJDBC
  Connect to database successfully
  Authentication: true
  16.3.如果你的 Mongo 需要验证用户名及密码,可以使用以下代码:
  import java.util.ArrayList;  
  import java.util.List;  
  import com.mongodb.MongoClient;  
  import com.mongodb.MongoCredential;  
  import com.mongodb.ServerAddress;  
  import com.mongodb.client.MongoDatabase;  

  public>  public static void main(String[] args){  
  try {  
  //连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址  
  //ServerAddress()两个参数分别为 服务器地址 和 端口  
  ServerAddress serverAddress = new ServerAddress("localhost",27017);  
  List<ServerAddress> addrs = new ArrayList<ServerAddress>();  
  addrs.add(serverAddress);  
  //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码  
  MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());  
  List<MongoCredential> credentials = new ArrayList<MongoCredential>();  
  credentials.add(credential);  
  //通过连接认证获取MongoDB连接  
  MongoClient mongoClient = new MongoClient(addrs,credentials);  
  //连接到数据库  
  MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");  
  System.out.println("Connect to database successfully");  
  } catch (Exception e) {  
  System.err.println( e.getClass().getName() + ": " + e.getMessage() );  
  }  
  }  
  }
  =======================================================================================================

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-424385-1-1.html 上篇帖子: 记一次MongoDB裸奔 下篇帖子: Mongodb相关 (Shell命令 / mongoose)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表