zoukankan      html  css  js  c++  java
  • MongoDB基础教程[菜鸟教程整理]

    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 title='MongoDB 教程'
    #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 title = 'MongoDB 教程')';

    =======================================================================================================
    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类型来检索集合中匹配的数据类型,并返回结果。
    类型 数字 备注
    Double 1
    String 2
    Object 3
    Array 4
    Binary data 5
    Undefined 6 已废弃。
    Object id 7
    Boolean 8
    Date 9
    Null 10
    Regular Expression 11
    JavaScript 13
    Symbol 14
    JavaScript (with scope) 15
    32-bit integer 16
    Timestamp 17
    64-bit integer 18
    Min key 255 Query with -1.
    Max key 127
    > 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() 接收可选参数,可选参数列表如下:
    Parameter Type Description
    background Boolean 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。
    unique Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
    name string 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
    dropDups Boolean 在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
    sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引 字段中不会查询出不包含对应字段的文档.。默认值为 false.
    expireAfterSeconds integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
    v index version 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
    weights document 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
    default_language string 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
    language_override string 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的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 : {
    title : 1 ,
    author : 1 ,
    }}
    );
    这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:
    db.article.aggregate(
    { $project : {
    _id : 0 ,
    title : 1 ,
    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_DIRECTORY mongodump --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 class MongoDBJDBC{
    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 class MongoDBJDBC {
    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() );
    }
    }
    }

    =======================================================================================================

  • 相关阅读:
    RSS文章订阅及生成RSS格式的xml
    一次Insert插入多条数据的方法
    构建struts2项目需要使用的最少架包
    Java 的HTML 解析器jsoup
    tomcat定时启动
    栈的实现与应用
    软件加密行业的现状和发展趋势
    InstallShield 2012 Spring新功能试用(18): Suite/Advanced UI 和 Advanced UI工程的界面编辑视图中添加了控件工具栏和语言切换功能
    BUG:InstallShield 2012 Spring之前版本的帮助文档中关于StrGetTokens示例代码的错误
    InstallShield 2012 Spring新功能试用(14): Suite/Advanced UI 和 Advanced UI工程新增加InstallScript安装包的条件检测项
  • 原文地址:https://www.cnblogs.com/wsjhk/p/7050709.html
Copyright © 2011-2022 走看看