美文网首页
MongoDB 基本操作整理

MongoDB 基本操作整理

作者: 莫夏_b560 | 来源:发表于2019-01-08 15:28 被阅读0次

    1、创建数据库

    如果要创建一个名称为<newdb>的数据库,那么使用 use DATABASE 语句将如下所示:

    > use newdb
    switched to db newdb
    

    Shell要检查当前选择的数据库,请使用 db 命令

    ->db
    newdb
    

    Shell如果要检查数据库列表,请使用命令:show dbs。

    >show dbs
    local     0.000025GB
    test      0.00002GB
    

    Shell创建的数据库(newdb)不在列表中。要显示数据库,需要至少插入一个文档,空的数据库是不显示出来的。

    >db.items.insert({"name":"yiibai tutorials"})
    >show dbs
    local     0.00005GB
    test      0.00002GB
    newdb      0.00002GB
    

    Shell在 MongoDB 中默认数据库是:test。 如果您还没有创建过任何数据库,则集合/文档将存储在test数据库中。

    2、删除数据库

    如果要删除新数据库<newdb>,那么dropDatabase()命令将如下所示:
    >use newdb
    switched to db newdb
    >db.dropDatabase()
    >{ "dropped" : "newdb", "ok" : 1 }
    

    3、创建集合

    MongoDB 的 db.createCollection(name,options) 方法用于在MongoDB 中创建集合。
    在命令中,name 是要创建的集合的名称。 options(可选)是一个文档,用于指定集合的配置。

    >use test
    switched to db test
    > db.createCollection("mycollection", {capped : true, autoIndexId : true, size : 6142800, max : 10000 })
    { "ok" : 1 }
    >show collections
    mycollection
    

    (1)capped Boolean (可选)如果为true,则启用封闭的集合。上限集合是固定大小的集合,它在达到其最大大小时自动覆盖其最旧的条目。 如果指定true,则还需要指定size参数。
    (2)autoIndexId Boolean (可选)如果为true,则在_id字段上自动创建索引。默认值为false。
    (3)size 数字 (可选)指定上限集合的最大大小(以字节为单位)。 如果capped为true,那么还需要指定此字段的值。
    (4)max 数字 (可选)指定上限集合中允许的最大文档数。

    4、删除集合

    首先,检查数据库 test 中可用的集合。

    >use test
    switched to db test
    > show collections
    mycol
    mycollection
    newcollection
    >
    

    Shell现在删除名称为 mycollection 的集合。

    >db.mycollection.drop()
    true
    >
    

    5、数据类型

    MongoDB支持许多数据类型。 其中一些是 -

    字符串 - 这是用于存储数据的最常用的数据类型。MongoDB中的字符串必须为UTF-8。
    整型 - 此类型用于存储数值。 整数可以是32位或64位,具体取决于服务器。
    布尔类型 - 此类型用于存储布尔值(true / false)值。
    双精度浮点数 - 此类型用于存储浮点值。
    最小/最大键 - 此类型用于将值与最小和最大BSON元素进行比较。
    数组 - 此类型用于将数组或列表或多个值存储到一个键中。
    时间戳 - ctimestamp,当文档被修改或添加时,可以方便地进行录制。
    对象 - 此数据类型用于嵌入式文档。对象 - 此数据类型用于嵌入式文档。
    Null - 此类型用于存储Null值。
    符号 - 该数据类型与字符串相同; 但是,通常保留用于使用特定符号类型的语言。
    日期 - 此数据类型用于以UNIX时间格式存储当前日期或时间。您可以通过创建日期对象并将日\月\年的日期进行指定自己需要的日期时间。
    对象ID - 此数据类型用于存储文档的ID。
    二进制数据 - 此数据类型用于存储二进制数据。
    代码 - 此数据类型用于将JavaScript代码存储到文档中。
    正则表达式 - 此数据类型用于存储正则表达式。
    

    6、插入文档
    (1)insert()方法

    >db.mycol.insert({
       _id: 100,
       title: 'MongoDB Overview', 
       description: 'MongoDB is no sql database',
       by: 'yiibai tutorials',
       url: 'http://www.yiibai.com',
       tags: ['mongodb', 'database', 'NoSQL'],
       likes: 100,
    })
    

    这里mycol是集合的名称,在前一章中所创建的。如果数据库中不存在集合,则MongoDB将创建此集合,然后将文档插入到该集合中。在插入的文档中,如果不指定_id参数,那么 MongoDB 会为此文档分配一个唯一的ObjectId。_id为集合中的每个文档唯一的12个字节的十六进制数。 12字节划分如下 -

    _id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)
    

    (2)db.post.save(document)

    (3)db.collection.insertOne()方法

    db.inventory.insertOne(
       { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
    )
    

    (4)db.collection.insertMany()方法

    db.inventory.insertMany([
       { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
       { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
       { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
    ])
    

    7、查询文档
    (1)find()方法

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

    > db.article.find()
    { "_id" : ObjectId("5c30513a155356b442831f2e"), "title" : "只有我一个人相信天荒地老", "time" : "2019-01-05", "content" : "已经对坐了一夜恐怕天色就要亮了 我开始有点明白" }
    { "_id" : ObjectId("5c30524c0197ac0b1598382f"), "name" : "张宇", "sex" : "男" }
    { "_id" : ObjectId("5c341994ec907f27e6cfd5fc"), "title" : "MongoDB Overview", "description" : "MongoDB is no sql database" }
    >
    

    (2)pretty()方法

    要以格式化的方式显示结果,可以使用pretty()方法

    > db.article.find().pretty()
    {
            "_id" : ObjectId("5c30513a155356b442831f2e"),
            "title" : "只有我一个人相信天荒地老",
            "time" : "2019-01-05",
            "content" : "已经对坐了一夜恐怕天色就要亮了 我开始有点明白"
    }
    { "_id" : ObjectId("5c30524c0197ac0b1598382f"), "name" : "张宇", "sex" : "男" }
    {
            "_id" : ObjectId("5c341994ec907f27e6cfd5fc"),
            "title" : "MongoDB Overview",
            "description" : "MongoDB is no sql database"
    }
    >
    

    (3)MongoDB 与 RDBMS的等效 Where 子句

    image.png

    (4)MongoDB中的AND操作符

    语法在find()方法中,如果通过使用’,‘将它们分开传递多个键,则 MongoDB 将其视为AND条件。 以下是AND的基本语法 -

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

    Shell示例以下示例将显示由“yiibai tutorials”编写并且标题为“MongoDB Overview”的所有教程。

    > db.mycol.find({$and:[{"by":"yiibai tutorials"},{"title": "MongoDB Overview"}]}).pretty()
    {
            "_id" : 100,
            "title" : "MongoDB Overview",
            "description" : "MongoDB is no sql database",
            "by" : "yiibai tutorials",
            "url" : "http://www.yiibai.com",
            "tags" : [
                    "mongodb",
                    "database",
                    "NoSQL"
            ],
            "likes" : 100
    }
    >
    

    (5)MongoDB中的OR操作符
    语法在要根据OR条件查询文档,需要使用$or关键字。 以下是OR条件的基本语法 -

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

    Shell示例以下示例将显示由“yiibai tutorials”编写或标题为“MongoDB Overview”的所有教程。

    >db.mycol.find({$or:[{"by":"yiibai tutorials"},{"title": "MongoDB Overview"}]}).pretty()
    {
       "_id": 100,
       "title": "MongoDB Overview", 
       "description": "MongoDB is no sql database",
       "by": "yiibai tutorials",
       "url": "http://www.yiibai.com",
       "tags": ["mongodb", "database", "NoSQL"],
       "likes": "100"
    }
    >
    

    (6)使用 AND 和 OR 条件一起

    示例以下示例将显示likes大于10以及标题是“MongoDB Overview”或者“yiibai tutorials”的所有文档。 等价SQL where子句为 -

    SELECT * FROM mycol where likes> 10 AND(by ='yiibai tutorials' OR title ='MongoDB Overview')
    
    >db.mycol.find({"likes": {$gt:10}, $or: [{"by": "yiibai tutorials"},
       {"title": "MongoDB Overview"}]}).pretty()
    {
       "_id": 100,
       "title": "MongoDB Overview", 
       "description": "MongoDB is no sql database",
       "by": "yiibai tutorials",
       "url": "http://www.yiibai.com",
       "tags": ["mongodb", "database", "NoSQL"],
       "likes": "100"
    }
    >
    

    (7)查询嵌入/嵌套文档

    测试数据

    db.inventory.insertMany( [
       { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
       { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
       { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
       { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
       { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
    ]);
    

    find()查询

    > db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )
    { "_id" : ObjectId("5c346aa4ec907f27e6cfd5fd"), "item" : "journal", "qty" : 25, "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "status" : "A" }
    

    查询嵌套字段:size中uom的值为‘in’的数据行

    > db.inventory.find( { "size.uom": "in" } )
    { "_id" : ObjectId("5c346aa4ec907f27e6cfd5fe"), "item" : "notebook", "qty" : 50, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "A" }
    { "_id" : ObjectId("5c346aa4ec907f27e6cfd5ff"), "item" : "paper", "qty" : 100, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "D" }
    >
    

    使用查询运算符指定匹配

    > db.inventory.find( { "size.h": { $lt: 15 } } )
    { "_id" : ObjectId("5c346aa4ec907f27e6cfd5fd"), "item" : "journal", "qty" : 25, "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "status" : "A" }
    { "_id" : ObjectId("5c346aa4ec907f27e6cfd5fe"), "item" : "notebook", "qty" : 50, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "A" }
    { "_id" : ObjectId("5c346aa4ec907f27e6cfd5ff"), "item" : "paper", "qty" : 100, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "D" }
    { "_id" : ObjectId("5c346aa4ec907f27e6cfd601"), "item" : "postcard", "qty" : 45, "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" }, "status" : "A" }
    >
    

    指定AND条件

    > db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } )
    { "_id" : ObjectId("5c346aa4ec907f27e6cfd5ff"), "item" : "paper", "qty" : 100, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "D" }
    >
    

    8、更新文档

    (1)MongoDB Update()方法

    语法

    > db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA)
    

    示例

    > db.mycol.find({'title':'MongoDB Overview'},{'_id':1, 'title':1})
    { "_id" : 100, "title" : "MongoDB Overview" }
    > # 更新操作
    > db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New Update MongoDB Overview'}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > # 查询更新后的结果 -
    > db.mycol.find({'_id':100},{'_id':1, 'title':1})
    { "_id" : 100, "title" : "New Update MongoDB Overview" }
    >
    

    默认情况下,MongoDB只会更新一个文档。要更新多个文档,需要将参数’multi‘设置为true。

    >db.mycol.update({'title':'MongoDB Overview'},
       {$set:{'title':'New Update MongoDB Overview'}},{multi:true})
    

    (2)MongoDB Save()方法

    #save()方法使用save()方法中传递的文档数据替换现有文档。语法MongoDB save()方法的基本语法如下所示:>db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})
    Shell以下示例将_id为 100 的文档使用新的文档替换。
    db.mycol.save(
       {
          "_id" : 100, "title":"Update By Save()Method.", "by":"yiibai.com"
       }
    )
    
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    
    db.mycol.find({'_id':100}, {'_id':1, 'title':1})
    { "_id" : 100, "title" : "Update By Save()Method." }
    

    9、删除文档
    (1)remove()方法
    MongoDB中的 remove()方法用于从集合中删除文档。
    remove()方法接受两个参数。 一个是删除条件,第二个是标志:justOne。
    criteria - (可选)符合删除条件的集合将被删除。
    justOne - (可选)如果设置为true或1,则只删除一个文档。
    语法remove()方法的基本语法如下 -

    >db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)
    
    #实例
    > db.mycol.remove({'_id':100})
    WriteResult({ "nRemoved" : 1 })
    > db.mycol.find({}, {'_id':1, 'title':1})
    { "_id" : 101, "title" : "MongoDB Guide" }
    { "_id" : 102, "title" : "NoSQL Database" }
    { "_id" : 104, "title" : "Python Quick Guide" }
    >
    

    (2 只删除一条文档记录

    如果有多条记录,并且只想删除第一条记录,则在remove()方法中设置justOne参数。

    >db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)
    

    (3)删除所有文档记录

    删除所有文档记录,可在remove()方法中设置justOne参数。

    如果不指定删除条件,MongoDB 将删除集合中的所有文档。 这相当于SQL的truncate命令。

    >db.mycol.remove()
    >db.mycol.find()
    >
    

    相关文章

      网友评论

          本文标题:MongoDB 基本操作整理

          本文链接:https://www.haomeiwen.com/subject/urtbrqtx.html