• MongoDB数据库基本操作


    一、用户
    1.切换collection
    >use admin 则表示切换到admin数据库。
    2.创建用户
    >db.createUser(
    {
    user:"username",
    pwd:"password",
    roles:[{role:"root",db:"admin"}]
    }
    );
    为指定collection创建用户时先使用命令:>use collection_name切换到其中,再创建。
    3.查询整个数据库的用户
    >db.system.users.find()
    查询当前collection的用户
    >show users
    4.用户认证
    >db.auth('username','password')
    5.修改密码
    >db.changeUserPassword("accountUser", "SOh3TbYhx8ypJPxmt1oOfL")
    6.删除用户
    ①删除单个用户
    >db.dropUser("accountUser", {w: "majority", wtimeout: 5000})
    ②删除所有用户
    >db.dropAllUsers( {w: "majority", wtimeout: 5000} )
    7.查询用户
    ①查询某指定用户
    >db.getUser("accountUser")
    ②查询所有用户
    >db.getUsers() 
    8.授予某用户权限
    >db.grantRolesToUser(
    "accountUser01",
    [ "readWrite" , { role: "read", db: "stock" } ],
    { w: "majority" , wtimeout: 4000 }
    )
    9.移除某用户权限
    >db.revokeRolesFromUser( "accountUser01",
    [ { role: "read", db: "stock" }, "readWrite" ],
    { w: "majority" }
    )
    10.更新用户信息
    >db.updateUser( "accountUser01",
    {
    customData : { employeeId : "0x3039" },
    roles : [
    { role : "read", db : "assets" }
    ]
    } )
    二、数据库和集合
    1.创建数据库
    >use db_example
    2.展示当前使用的数据库:
    >db
    3.展示所有数据库:
    >show dbs
    4.创建的新数据库不会出现在数据库列表里,需要先插入一条数据
    >db.db_example.insert({"key_test":"value_est"})
    6.删除当前数据库
    >db.dropDatabase()
    7.删除数据库中的collection
    >db.collection.drop()
    三、增删改查
    1.新增
    ①插入一条:
    >db.products.insertOne( { _id: 10, item: "box", qty: 20 } )
    ②插入多条:
    >db.products.insertMany( [ { item: "card", qty: 15 }, { item: "envelope", qty: 20 }, { item: "stamps" , qty: 30 } ] )
    ③插入一条或多条:
    >db.products.insert( { _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 }
    ]
    )
    ④save命令:
    新增一条document
    >db.products.save( { item: "book", qty: 40 } )
    新增一条document,如果_id所指项存在则覆盖原有的,否则直接插入
    >db.products.save( { _id: 100, item: "water", qty: 30 } )
    2.查询
    ①在一个collection中查询所有,相当于SELECT * FROM inventory
    >db.inventory.find( {} )
    查询不存在某字段的项,例如:
    >db.inventory.find( { item : { $exists: false } } )
    查询某字段为空、或者不存在该项,例如:
    >db.inventory.find( { item: null } )
    查询存在某字段且为空的项,例如:
    >db.inventory.find( { item : { $type: 10 } } )
    上面这条查询使用了BSON Type,由此可以看出,MongoDB支持不同数据类型的检索查询。
    格式化查询,所有查询命令后都可加pretty(),输出的数据格式更易读,例如:
    >db.inventory.find().pretty()
    查询结果排序,例如:
    >db.inventory.find().sort( { score: -1} )
    ②按某个条件查询,相当于SELECT * FROM inventory WHERE status = "D"
    >db.inventory.find( { status: "D" } )
    ③条件in查询,相当于SELECT * FROM inventory WHERE status in ("A", "D")
    >db.inventory.find( { status: { $in: [ "A", "D" ] } } )
    ④条件and查询,相当于SELECT * FROM inventory WHERE status = "A" AND qty < 30
    >db.inventory.find( { status: "A", qty: { $lt: 30 } } )
    ⑤条件or查询,相当于SELECT * FROM inventory WHERE status = "A" OR qty < 30
    >db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )
    ⑥条件or和and查询,相当于SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%")
    >db.inventory.find( {
    status: "A",
    $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
    } )
    由此可以看出MongoDB查询支持正则表达式:$regex
    ④统计某个collection总条数,例如:
    >db.orders.count( { ord_dt: { $gt: new Date('01/01/2012') } } )
    此命令和命令db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).count()是等价的。
    ⑤统计某collection的存储空间,例如:
    >db.orders.dataSize()
    ⑥查看某命令的执行计划,例如:
    >db.products.explain().count( { quantity: { $gt: 50 } } )
    ⑦去重命令,例如:
    原数据库中又如下数据:
    { "_id": 1, "dept": "A", "item": { "sku": "111", "color": "red" }, "sizes": [ "S", "M" ] }
    { "_id": 2, "dept": "A", "item": { "sku": "111", "color": "blue" }, "sizes": [ "M", "L" ] }
    { "_id": 3, "dept": "B", "item": { "sku": "222", "color": "blue" }, "sizes": "S" }
    { "_id": 4, "dept": "A", "item": { "sku": "333", "color": "black" }, "sizes": [ "S" ] }
    >db.inventory.distinct( "dept" )
    则显示如下:
    [ "A", "B" ]
    ⑧显示某个collection中的所有索引,例如:
    >db.inventory.getIndexes()
    ⑨复合运算,例如:
    原数据库中又如下数据
    { _id: 1, cust_id: "abc1", ord_date: ISODate("2012-11-02T17:04:11.102Z"), status: "A", amount: 50 }
    { _id: 2, cust_id: "xyz1", ord_date: ISODate("2013-10-01T17:04:11.102Z"), status: "A", amount: 100 }
    { _id: 3, cust_id: "xyz1", ord_date: ISODate("2013-10-12T17:04:11.102Z"), status: "D", amount: 25 }
    { _id: 4, cust_id: "xyz1", ord_date: ISODate("2013-10-11T17:04:11.102Z"), status: "D", amount: 125 }
    { _id: 5, cust_id: "abc1", ord_date: ISODate("2013-11-12T17:04:11.102Z"), status: "A", amount: 25 }
    >db.orders.aggregate([
    { $match: { status: "A" } },
    { $group: { _id: "$cust_id", total: { $sum: "$amount" } } },
    { $sort: { total: -1 } }
    ])
    则显示如下:
    { "_id" : "xyz1", "total" : 100 }
    { "_id" : "abc1", "total" : 75 }
    ⑩数据库达到最大存储时是否自动覆盖旧数据查询,例如:
    >db.collection.isCapped()
    返回true和false
    3.修改
    ①更新第一条匹配的数据,例如:
    >db.inventory.updateOne(
    { item: "paper" },
    {
    $set: { "size.uom": "cm", status: "P" },
    $currentDate: { lastModified: true }
    }
    )
    这条命令会将inventory中第一个item为paper的document更新为{}中的内容,即:size.uom=cm, status=P, 赋值lastModified为当前时间,如果lastModified不存在则创建该字段。
    ②更新多条匹配的数据,例如:
    >db.inventory.updateMany(
    { "qty": { $lt: 50 } },
    {
    $set: { "size.uom": "in", status: "P" },
    $currentDate: { lastModified: true }
    }
    )
    这条命令将inventory中所有qty<=50的document更新为{}中的内容。
    ③更新一条或多条匹配的数据,例如:
    >db.books.update(
    { stock: { $lte: 10 } },
    { $set: { reorder: true } },
    { multi: true }
    )
    更新所有stock<=10的匹配数据为reorder=true,因为有选项multi: true存在,multi默认为false,即只修改第一条匹配数据。
    ④替换一条匹配的数据,例如:
    >db.inventory.replaceOne(
    { item: "paper" },
    { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
    )
    这条命令会将inventory中第一个item为paper的document更新为中的内容,但是_id字段不会更新;也可以把_id字段放倒下方的{}中,但是必须和原有数据库的一致。也就是说替换命令无论如何不能修改_id字段值。
    ⑤Other Option
    Upsert:
    假如updateOne(), updateMany(),update() 或者 replaceOne()包括upsert : true选项,而且指定的条件没有在原有数据库过滤到,比如③中的item=paper,则mongo会生产一条并插入到数据库中;假如存在,则做相应的修改或替换操作。
    Multi:
    如果update()操作含有multi:true选项,则或修改多条匹配的数据,为false则只修改一条。
    $set, $inc,$unset分别为修改、新增和删除字段,例如:
    >db.books.update( { _id: 1 }, { $unset: { tags: 1 } } )
    4.删除
    mongo在执行删除操作时不会删除相应的索引,即使删除某个collection中的所有数据。
    ①删除某个collection中所有数据,例如:
    >db.inventory.deleteMany({})
    按条件删除,例如:
    >db.inventory.deleteMany({ status : "A" })
    ②仅删除某个collection中的一个数据,即使条件匹配了多条数据,例如:
    >db.inventory.deleteOne( { status: "D" } )
    另一个按条件删除:
    >db.products.remove( { qty: { $gt: 20 } } )
    ③另一个删除某个collection中的所有数据,例如:
    >db.inventory.remove( { } )
    由于此操作仍然保留索引,所以不如使用db.inventory.drop()命令删除表再重新创建表结构和索引更高效。
    5.其他
    ①返回某个collection的统计数据信息,例如:
    >db.collection.stats()
    ②返回分配给某个collection存储数据的空间大小,例如:
    >db.collection.storageSize()
    ③返回分配给某个collection存储索引的空间大小,例如:
    >db.collection.totalIndexSize()
    ④返回分配给某个collection存储数据和索引的空间大小,例如:
    >db.collection.totalSize(http://www.amjmh.com)
    ---------------------

  • 相关阅读:
    流量控制--2.传统的流量控制元素
    流量控制--1.概览
    Opentelemetry Collector的配置和使用
    高德全链路压测——精准控压的建设实践
    高德全链路压测——语料智能化演进之路
    业内首发车道级导航背后——详解高精定位技术演进与场景应用
    浅析云控平台画面传输的视频流方案
    关于卫星定位,你想知道的一切
    Pod容器中安装软件包
    面试应该怎么问问题?
  • 原文地址:https://www.cnblogs.com/ly570/p/11335167.html
Copyright © 2020-2023  润新知