zoukankan      html  css  js  c++  java
  • MongoDB操作命令

    数据库

    一个mongodb中可以建立多个数据库。

    MongoDB的默认数据库为"db",该数据库存储在data目录中。

    MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

    "show dbs" 命令可以显示所有数据的列表。

    执行 "db" 命令可以显示当前数据库对象或集合。

    运行"use"命令,可以连接到一个指定的数据库。

    > use local
    switched to db local
    > db
    local
    >

    以上实例命令中,"local" 是你要链接的数据库。

    在下一个章节我们将详细讲解MongoDB中命令的使用。

    数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串。

    • 不能是空字符串("")。
    • 不得含有' '(空格)、.、$、/、和 (空字符)。
    • 应全部小写。
    • 最多64字节。

    有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。

    • admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
    • local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
    • config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

    MongoDB 数据类型

    下表为MongoDB中常用的几种数据类型。

    数据类型描述
    String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
    Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
    Boolean 布尔值。用于存储布尔值(真/假)。
    Double 双精度浮点值。用于存储浮点值。
    Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
    Arrays 用于将数组或列表或多个值存储为一个键。
    Timestamp 时间戳。记录文档修改或添加的具体时间。
    Object 用于内嵌文档。
    Null 用于创建空值。
    Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
    Date 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
    Object ID 对象 ID。用于创建文档的 ID。
    Binary Data 二进制数据。用于存储二进制数据。
    Code 代码类型。用于在文档中存储 JavaScript 代码。
    Regular expression

    正则表达式类型。用于存储正则表达式。

    MongoDB 创建数据库

    实例

    以下实例我们创建了数据库 runoob:

    > use runoob
    switched to db runoob
    > db
    runoob
    > 
    

    如果你想查看所有数据库,可以使用 show dbs 命令:

    > show dbs
    local  0.078GB
    test   0.078GB
    > 
    

    可以看到,我们刚创建的数据库 runoob 并不在数据库的列表中, 要显示它,我们需要向 runoob 数据库插入一些数据。

    > db.runoob.insert({"name":"菜鸟教程"})
    WriteResult({ "nInserted" : 1 })
    > show dbs
    local   0.078GB
    runoob  0.078GB
    test    0.078GB
    > 
    

    MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

    MongoDB 删除数据库

    语法

    MongoDB 删除数据库的语法格式如下:

    db.dropDatabase()

    删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名。

    实例

    以下实例我们删除了数据库 runoob。

    首先,查看所有数据库:

    > show dbs
    local   0.078GB
    runoob  0.078GB
    test    0.078GB
    

    接下来我们切换到数据库 runoob:

    > use runoob
    switched to db runoob
    > 
    

    执行删除命令:

    > db.dropDatabase()
    { "dropped" : "runoob", "ok" : 1 }
    

    最后,我们再通过 show dbs 命令数据库是否删除成功:

    > show dbs
    local  0.078GB
    test   0.078GB
    > 
    

    删除集合

    集合删除语法格式如下:

    db.collection.drop()
    

    以下实例删除了 runoob 数据库中的集合 site:

    > use runoob
    switched to db runoob
    > show tables
    site
    > db.site.drop()
    true
    > show tables
    > 
    

    插入文档

    MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:

    db.COLLECTION_NAME.insert(document)

    实例

    以下文档可以存储在 MongoDB 的 runoob 数据库 的 col 集合中:

    >db.col.insert({title: 'MongoDB 教程', 
        description: 'MongoDB 是一个 Nosql 数据库',
        by: '菜鸟教程',
        url: 'http://www.runoob.com',
        tags: ['mongodb', 'database', 'NoSQL'],
        likes: 100
    })

    以上实例中 col 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。

    查看已插入文档:

    > db.col.find()
    { "_id" : ObjectId("56064886ade2f21f36b03134"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
    >

    我们也可以将数据定义为一个变量,如下所示:

    > document=({title: 'MongoDB 教程', 
        description: 'MongoDB 是一个 Nosql 数据库',
        by: '菜鸟教程',
        url: 'http://www.runoob.com',
        tags: ['mongodb', 'database', 'NoSQL'],
        likes: 100
    });

    执行后显示结果如下:

    {
            "title" : "MongoDB 教程",
            "description" : "MongoDB 是一个 Nosql 数据库",
            "by" : "菜鸟教程",
            "url" : "http://www.runoob.com",
            "tags" : [
                    "mongodb",
                    "database",
                    "NoSQL"
            ],
            "likes" : 100
    }

    执行插入操作:

    > db.col.insert(document)
    WriteResult({ "nInserted" : 1 })
    >

    插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据

    MongoDB 更新文档

    MongoDB 使用 update() 和 save() 方法来更新集合中的文档。接下来让我们详细来看下两个函数的应用及其区别。


    update() 方法

    update() 方法用于更新已存在的文档。语法格式如下:

    db.collection.update(
       <query>,
       <update>,
       {
         upsert: <boolean>,
         multi: <boolean>,
         writeConcern: <document>
       }
    )

    参数说明:

    • query : update的查询条件,类似sql update查询内where后面的。
    • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
    • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
    • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
    • writeConcern :可选,抛出异常的级别。

    实例

    我们在集合 col 中插入如下数据:

    >db.col.insert({
        title: 'MongoDB 教程', 
        description: 'MongoDB 是一个 Nosql 数据库',
        by: '菜鸟教程',
        url: 'http://www.runoob.com',
        tags: ['mongodb', 'database', 'NoSQL'],
        likes: 100
    })

    接着我们通过 update() 方法来更新标题(title):

    >db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })   # 输出信息
    > db.col.find().pretty()
    {
            "_id" : ObjectId("56064f89ade2f21f36b03136"),
            "title" : "MongoDB",
            "description" : "MongoDB 是一个 Nosql 数据库",
            "by" : "菜鸟教程",
            "url" : "http://www.runoob.com",
            "tags" : [
                    "mongodb",
                    "database",
                    "NoSQL"
            ],
            "likes" : 100
    }
    >

    可以看到标题(title)由原来的 "MongoDB 教程" 更新为了 "MongoDB"。

    以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。

    >db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})

    save() 方法

    save() 方法通过传入的文档来替换已有文档。语法格式如下:

    db.collection.save(
       <document>,
       {
         writeConcern: <document>
       }
    )

    参数说明:

    • document : 文档数据。
    • writeConcern :可选,抛出异常的级别。

    实例

    以下实例中我们替换了 _id 为 56064f89ade2f21f36b03136 的文档数据:

    >db.col.save({
    	"_id" : ObjectId("56064f89ade2f21f36b03136"),
        "title" : "MongoDB",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "Runoob",
        "url" : "http://www.runoob.com",
        "tags" : [
                "mongodb",
                "NoSQL"
        ],
        "likes" : 110
    })

    替换成功后,我们可以通过 find() 命令来查看替换后的数据

    >db.col.find().pretty()
    {
            "_id" : ObjectId("56064f89ade2f21f36b03136"),
            "title" : "MongoDB",
            "description" : "MongoDB 是一个 Nosql 数据库",
            "by" : "Runoob",
            "url" : "http://www.runoob.com",
            "tags" : [
                    "mongodb",
                    "NoSQL"
            ],
            "likes" : 110
    }
    >

    更多实例

    只更新第一条记录:

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

    MongoDB 删除文档

    语法

    remove() 方法的基本语法格式如下所示:

    db.collection.remove(
       <query>,
       <justOne>
    )

    如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:

    db.collection.remove(
       <query>,
       {
         justOne: <boolean>,
         writeConcern: <document>
       }
    )

    参数说明:

    • query :(可选)删除的文档的条件。
    • justOne : (可选)如果设为 true 或 1,则只删除一个文档。
    • writeConcern :(可选)抛出异常的级别。

    实例

    以下文档我们执行两次插入操作:

    >db.col.insert({title: 'MongoDB 教程', 
        description: 'MongoDB 是一个 Nosql 数据库',
        by: '菜鸟教程',
        url: 'http://www.runoob.com',
        tags: ['mongodb', 'database', 'NoSQL'],
        likes: 100
    })

    使用 find() 函数查询数据:

    > db.col.find()
    { "_id" : ObjectId("56066169ade2f21f36b03137"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
    { "_id" : ObjectId("5606616dade2f21f36b03138"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }

    接下来我们移除 title 为 'MongoDB 教程' 的文档:

    >db.col.remove({'title':'MongoDB 教程'})
    WriteResult({ "nRemoved" : 2 })           # 删除了两条数据
    >db.col.find()
    ……                                        # 没有数据

    MongoDB 查询文档

    MongoDB 查询文档使用 find() 方法。

    find() 方法以非结构化的方式来显示所有文档。

    语法

    MongoDB 查询数据的语法格式如下:

    db.collection.find(query, projection)
    • query :可选,使用查询操作符指定查询条件
    • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

    如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

    >db.col.find().pretty()
    

    pretty() 方法以格式化的方式来显示所有文档。

    实例

    以下实例我们查询了集合 col 中的数据:

    > db.col.find().pretty()
    {
            "_id" : ObjectId("56063f17ade2f21f36b03133"),
            "title" : "MongoDB 教程",
            "description" : "MongoDB 是一个 Nosql 数据库",
            "by" : "菜鸟教程",
            "url" : "http://www.runoob.com",
            "tags" : [
                    "mongodb",
                    "database",
                    "NoSQL"
            ],
            "likes" : 100
    }
    

    除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。

    MongoDB AND 条件

    MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,及常规 SQL 的 AND 条件。

    语法格式如下:

    >db.col.find({key1:value1, key2:value2}).pretty()

    实例

    以下实例通过 by 和 title 键来查询 菜鸟教程 中 MongoDB 教程 的数据

    > db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"}).pretty()
    {
            "_id" : ObjectId("56063f17ade2f21f36b03133"),
            "title" : "MongoDB 教程",
            "description" : "MongoDB 是一个 Nosql 数据库",
            "by" : "菜鸟教程",
            "url" : "http://www.runoob.com",
            "tags" : [
                    "mongodb",
                    "database",
                    "NoSQL"
            ],
            "likes" : 100
    }


    MongoDB OR 条件

    MongoDB OR 条件语句使用了关键字 $or,语法格式如下:

    >db.col.find(
       {
          $or: [
    	     {key1: value1}, {key2:value2}
          ]
       }
    ).pretty()
    

    实例

    以下实例中,我们演示了查询键 by 值为 菜鸟教程 或键 title 值为 MongoDB 教程 的文档。

    >db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
    {
            "_id" : ObjectId("56063f17ade2f21f36b03133"),
            "title" : "MongoDB 教程",
            "description" : "MongoDB 是一个 Nosql 数据库",
            "by" : "菜鸟教程",
            "url" : "http://www.runoob.com",
            "tags" : [
                    "mongodb",
                    "database",
                    "NoSQL"
            ],
            "likes" : 100
    }
    >
    

    AND 和 OR 联合使用

    以下实例演示了 AND 和 OR 联合使用,类似常规 SQL 语句为: 'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'

    >db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
    {
            "_id" : ObjectId("56063f17ade2f21f36b03133"),
            "title" : "MongoDB 教程",
            "description" : "MongoDB 是一个 Nosql 数据库",
            "by" : "菜鸟教程",
            "url" : "http://www.runoob.com",
            "tags" : [
                    "mongodb",
                    "database",
                    "NoSQL"
            ],
            "likes" : 100
    }

    MongoDB 条件操作符

    
    

    描述

    条件操作符用于比较两个表达式并从mongoDB集合中获取数据。

    在本章节中,我们将讨论如何在MongoDB中使用条件操作符。

    MongoDB中条件操作符有:

    • (>) 大于 - $gt
    • (<) 小于 - $lt
    • (>=) 大于等于 - $gte
    • (<= ) 小于等于 - $lte

    我们使用的数据库名称为"runoob" 我们的集合名称为"col",以下为我们插入的数据。

    为了方便测试,我们可以先使用以下命令清空集合 "col" 的数据:

    db.col.remove({})

    插入以下数据

    >db.col.insert({
        title: 'PHP 教程', 
        description: 'PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。',
        by: '菜鸟教程',
        url: 'http://www.runoob.com',
        tags: ['php'],
        likes: 200
    })
    
    
    >db.col.insert({title: 'Java 教程', 
        description: 'Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。',
        by: '菜鸟教程',
        url: 'http://www.runoob.com',
        tags: ['java'],
        likes: 150
    })
    
    
    >db.col.insert({title: 'MongoDB 教程', 
        description: 'MongoDB 是一个 Nosql 数据库',
        by: '菜鸟教程',
        url: 'http://www.runoob.com',
        tags: ['mongodb'],
        likes: 100
    })

    使用find()命令查看数据:

    > db.col.find()
    { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 }
    { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 }
    { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }
    
    

    MongoDB (>) 大于操作符 - $gt

    如果你想获取 "col" 集合中 "likes" 大于 100 的数据,你可以使用以下命令:

    db.col.find({"likes" : {$gt : 100}})

    类似于SQL语句:

    Select * from col where likes > 100;

    输出结果:

    > db.col.find({"likes" : {$gt : 100}})
    { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 }
    { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 }
    >
    
    

    MongoDB(>=)大于等于操作符 - $gte

    如果你想获取"col"集合中 "likes" 大于等于 100 的数据,你可以使用以下命令:

    db.col.find({likes : {$gte : 100}})

    类似于SQL语句:

    Select * from col where likes >=100;

    输出结果:

    > db.col.find({likes : {$gte : 100}})
    { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 }
    { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 }
    { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }
    >
    
    

    MongoDB (<) 小于操作符 - $lt

    如果你想获取"col"集合中 "likes" 小于 150 的数据,你可以使用以下命令:

    db.col.find({likes : {$lt : 150}})

    类似于SQL语句:

    Select * from col where likes < 150;

    输出结果:

    > db.col.find({likes : {$lt : 150}})
    { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }
    
    

    MongoDB (<=) 小于操作符 - $lte

    如果你想获取"col"集合中 "likes" 小于等于 150 的数据,你可以使用以下命令:

    db.col.find({likes : {$lte : 150}})

    类似于SQL语句:

    Select * from col where likes <= 150;

    输出结果:

    > db.col.find({likes : {$lte : 150}})
    { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 }
    { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }
    
    

    MongoDB 使用 (<) 和 (>) 查询 - $lt 和 $gt

    如果你想获取"col"集合中 "likes" 大于100,小于 200 的数据,你可以使用以下命令:

    db.col.find({likes : {$lt :200, $gt : 100}})

    类似于SQL语句:

    Select * from col where likes>100 AND  likes<200;

    输出结果:

    > db.col.find({likes : {$lt :200, $gt : 100}})
    { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 }
    >






  • 相关阅读:
    Django——froms渲染错误信息,参数配置,局部钩子和全局钩子
    Django——forms组件(form校验字段功能,渲染模板功能)
    Django——完美的分页器
    delphi 判断目录是否存在
    UniGUI学习之UniMemo行距控制(41)
    UniGUI学习之UniDBComboBox怎么实现“模糊查询?(40)
    Javaday13(基础数据结构)
    Javaday12(Lambda,枚举,异常,断言)
    Javaday11(final、static、内部类)
    javaday10(类与类的关系、访问修饰符、抽象和接口)
  • 原文地址:https://www.cnblogs.com/wenhongyu/p/7478686.html
Copyright © 2011-2022 走看看