美文网首页我爱编程
MongoDB简单使用

MongoDB简单使用

作者: 程序员有话说 | 来源:发表于2016-09-19 01:03 被阅读0次

    一、介绍

    MongoDB 是一个高性能分布式文件存储数据库,通常采用官方的二进制包进行安装.

    二、MongoDB 安装

    • 使用官网二进制包安装 (根据系统选择对应的版本)
    wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.8.tgz     -c 选项断点续传
    tar -zxvf mongodb-linux-x86_64-3.2.8.tgz
    mv mongodb-linux-x86_64-3.2.8  /web/mongodb      //复制到指定目录即可
    cd /web/mongodb    
    mkdir mongodb_db  //创建数据库存放位置
    /web/mongodb/bin/mongod --dbpath=/web/mongodb/mongodb_db/
    指定数据库
    在另一个终端打开mongodb
    /web/mongodb/bin/mongo
    出现如下,则说明OK   
    2016-04-13T06:58:53.672-0400 I CONTROL  [initandlisten] ** ......
    
    • MongoDB服务加入随机启动
    vi /etc/rc.local
    
    • 使用vi编辑器打开配置文件,并在其中加入下面一行代码
    /web/mongodb/bin/mongod -dbpath=/usr/local/mongodb/data/db --port 27017 -logpath=/usr/local/mongodb/log --logappend
    
    • MongoDB服务客户端加入环境变量
    ln -s /web/ mongodb/bin/mongo  /usr/bin/ mongo
    
    • 执行mongod启动MongoDB服务器指定配置文件
    /web/mongodb/bin/mongod --config mongodb.conf
    

    三、mongodb和关系型数据库的对比图

    对比项 mongodb MySQL oracle
    集合list 二维表table
    表的一行数据 文档document 一条记录record
    表字段 键key 字段field
    字段值 值value 值value
    主外键 PK,FK
    灵活度扩展性 极高

    四 、基本SHELL命令

    创建一个数据库
    use [dbname] //此时你什么也没有处理就离开则这个空数据库会被删除
    给指定数据库添加集合并且添加记录
    db.[documentname].insert({name:"zhangsan"}); //自动创建一个文档ID
    查看所有数据库
    show dbs //默认提供本地数据
    查看数据库中的所有文档
    show collections
    官方文档:https://docs.mongodb.com/manual/crud/

    五、 插入

    1.db.collection.insert()
    2.db.collection.insertOne() New in version 3.2
    3.db.collection.insertMany() New in version 3.2
    crud-annotated-mongodb-insert.png

    1、db.collection.insert()

    • 插入一个文档没有指定一个_id字段
      db.products.insert( { item: "card", qty: 15 } )
      备注:在插入期间,mongod将创建_id领域并为其分配一个独一无二的ObjectId的文档ID
      { "_id" : ObjectId("5063114bd386d8fadbd6b004"), "item" : "card", "qty" : 15 }
    • 插入一个文档指定一个_id字段
      db.products.insert( { _id: 10, item: "box", qty: 20 } )
      { "_id" : 10, "item" : "box", "qty" : 20 }
    • 一次插入多条,使用数组对象
    db.products.insert(
       [
         { _id: 11, item: "pencil", qty: 50, type: "no.2" },
         { item: "pen", qty: 20 },
         { item: "eraser", qty: 25 }
       ]
    { "_id" : 11, "item" : "pencil", "qty" : 50, "type" : "no.2" }
    { "_id" : ObjectId("51e0373c6f35bd826f47e9a0"), "item" : "pen", "qty" : 20 }
    { "_id" : ObjectId("51e0373c6f35bd826f47e9a1"), "item" : "eraser", "qty" : 25 }
    

    2、db.collection.insertOne() New in version 3.2.

    • 插入一个文档没有指定一个_id字段
    try {
       db.products.insertOne( { item: "card", qty: 15 } );
    } catch (e) {
       print (e);
    };
    
    • 插入一个文档指定一个_id字段
    try {
       db.products.insertOne( { _id: 10, item: "box", qty: 20 } );
    } catch (e) {
       print (e);
    }
    
    • 插入一个重复的索引值将抛出一个异常。
    try {
       db.products.insertOne( { _id: 10, "item" : "packing peanuts", "qty" : 200 } );
    } catch (e) {
       print (e);
    }
    //错误提示
    WriteError({
       "index" : 0,
       "code" : 11000,
       "errmsg" : "E11000 duplicate key error collection: inventory.products index: _id_ dup key: { : 10.0 }",
       "op" : {
          "_id" : 10,
          "item" : "packing peanuts",
          "qty" : 200
       }
    })
    

    3、db.collection.insertMany() New in version 3.2.

    • 插入一个文档没有指定一个_id字段
    try {
       db.products.insertMany( [
          { item: "card", qty: 15 },
          { item: "envelope", qty: 20 },
          { item: "stamps" , qty: 30 }
       ] );
    } catch (e) {
       print (e);
    }
    //输出
    {
       "acknowledged" : true,
       "insertedIds" : [
          ObjectId("562a94d381cb9f1cd6eb0e1a"),
          ObjectId("562a94d381cb9f1cd6eb0e1b"),
          ObjectId("562a94d381cb9f1cd6eb0e1c")
       ]
    }
    
    • 插入一个文档指定一个_id字段
    try {
       db.products.insertMany( [
          { _id: 10, item: "large box", qty: 20 },
          { _id: 11, item: "small box", qty: 55 },
          { _id: 12, item: "medium box", qty: 30 }
       ] );
    } catch (e) {
       print (e);
    }
    //输出
    { "acknowledged" : true, "insertedIds" : [ 10, 11, 12 ] }
    

    六、查询

    db.collection.find()

    在插入示例文档之前使用db.users.drop()删除,避免相同文档ID冲突。


    crud-annotated-mongodb-find.png
    db.users.insertMany(
      [
         {
           _id: 1,
           name: "sue",
           age: 19,
           type: 1,
           status: "P",
           favorites: { artist: "Picasso", food: "pizza" },
           finished: [ 17, 3 ],
           badges: [ "blue", "black" ],
           points: [
              { points: 85, bonus: 20 },
              { points: 85, bonus: 10 }
           ]
         },
         {
           _id: 2,
           name: "bob",
           age: 42,
           type: 1,
           status: "A",
           favorites: { artist: "Miro", food: "meringue" },
           finished: [ 11, 25 ],
           badges: [ "green" ],
           points: [
              { points: 85, bonus: 20 },
              { points: 64, bonus: 12 }
           ]
         },
         {
           _id: 3,
           name: "ahn",
           age: 22,
           type: 2,
           status: "A",
           favorites: { artist: "Cassatt", food: "cake" },
           finished: [ 6 ],
           badges: [ "blue", "red" ],
           points: [
              { points: 81, bonus: 8 },
              { points: 55, bonus: 20 }
           ]
         },
         {
           _id: 4,
           name: "xi",
           age: 34,
           type: 2,
           status: "D",
           favorites: { artist: "Chagall", food: "chocolate" },
           finished: [ 5, 11 ],
           badges: [ "red", "black" ],
           points: [
              { points: 53, bonus: 15 },
              { points: 51, bonus: 15 }
           ]
         },
         {
           _id: 5,
           name: "xyz",
           age: 23,
           type: 2,
           status: "D",
           favorites: { artist: "Noguchi", food: "nougat" },
           finished: [ 14, 6 ],
           badges: [ "orange" ],
           points: [
              { points: 71, bonus: 20 }
           ]
         },
         {
           _id: 6,
           name: "abc",
           age: 43,
           type: 1,
           status: "A",
           favorites: { food: "pizza", artist: "Picasso" },
           finished: [ 18, 12 ],
           badges: [ "black", "blue" ],
           points: [
              { points: 78, bonus: 8 },
              { points: 57, bonus: 7 }
           ]
         }
      ]
    )
    
    • 集合中的所有文档
      db.users.find() //db.users.find().toArray() //转数组形式
    • 指定条件查询
    • 用户集合所有文件status字段值为"A" db.users.find( { status: "A" } )
    • 查询操作符
    比较运算符
    Name 符号 Description 案例
    $eq = 匹配值等于指定值 db.inventory.find( { qty: { $eq: 20 } } ) ; db.inventory.find( { qty: 20 } ) ; db.inventory.find( { tags: { $eq: [ "A", "B" ] } } ) ; db.inventory.find( { tags: [ "A", "B" ] } )
    $gt > 匹配值大于指定值 db.inventory.find( { qty: { $gt: 20 } } )
    $gte >= 匹配值大于或等于指定值 db.inventory.find( { qty: { $gte: 20 } } )
    $lt < 匹配值小于指定值 db.inventory.find( { qty: { $lt: 20 } } )
    $lte <= 匹配值小于或等于指定值 db.inventory.find( { qty: { $lte: 20 } } )
    $ne != 匹配所有的值不等于指定值 db.inventory.find( { qty: { $ne: 20 } } )
    $in exist 匹配任何一个数组中指定的值 db.inventory.find( { qty: { $in: [ 5, 15 ] } } ) ; db.inventory.find( { tags: { $in: [ /^be/, /^st/ ] } } )
    $nin not exist 匹配出不在数组中指定的值 db.inventory.find( { qty: { $nin: [ 5, 15 ] } } )
    逻辑运算符
    Name 符号 Description 案例
    $or OR 逻辑或 db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ) ; db.inventory.find ( { quantity: { $in: [20, 50] } } )
    $and AND 逻辑与 db.inventory.find( { $and: [ { price: { $ne: 1.99 } }, { price: { $exists: true } } ] } ) ; db.inventory.find( { price: { $ne: 1.99, $exists: true } } )
    $not NOT 不在范围内 db.inventory.find( { price: { $not: { $gt: 1.99 } } } )
    $nor NOR 不存在 db.inventory.find( { $nor: [ { price: 1.99 }, { sale: true } ] } )

    详细使用官方文档: https://docs.mongodb.com/manual/reference/operator/query/

    七、修改

    db.collection.update()
    crud-annotated-mongodb-update.png
    db.collection.update()
    db.collection.updateOne() New in version 3.2
    db.collection.updateMany() New in version 3.2
    db.collection.replaceOne() New in version 3.2

    八、删除

    db.collection.remove()
    crud-annotated-mongodb-remove.png
    db.collection.remove()
    db.collection.deleteOne() New in version 3.2
    db.collection.deleteMany() New in version 3.2

    相关文章

      网友评论

        本文标题:MongoDB简单使用

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