zoukankan      html  css  js  c++  java
  • Mongodb的基本操作-数据库 集合 文档的增删改查

    数据库操作:

    //查看有哪些数据库

    > show dbs

    local  0.078GB

    mydb   0.078GB

    //use操作将切换到一个数据库 如果数据库存在将直接切换 如果不存在 那么会在切换之后,第一次执行新增修改操作的时候去创建这个数据库

    > use newdb

    switched to db newdb

    //此时还没有创建

    > show dbs

    local  0.078GB

    mydb   0.078GB

    > db.persion.insert({age:10})

    WriteResult({ "nInserted" : 1 })

    //数据库已经创建

    > show dbs

    local  0.078GB

    mydb   0.078GB

    newdb  0.078GB

    //删除数据库

    > db.dropDatabase()

    { "dropped" : "newdb", "ok" : 1 }

    > show dbs

    local  0.078GB

    mydb   0.078GB

    集合操作:

    > use mydb

    switched to db mydb

    //查看当前数据库的所有集合 因为是新数据库所以为空

    > show tables

    //插入一条数据 这里会自动插入一个集合person

    > db.person.insert({name:'zjf',age:30})

    WriteResult({ "nInserted" : 1 })

    //查看所有集合 已经有了person (system.indexes是系统产生的)

    > show tables

    person

    system.indexes

    //删除集合

    > db.person.drop()

    true

    > show tables

    system.indexes

    文档插入

    //使用db.collection.insert()语法

    > db.person.insert({name:'zjf',age:30})

    WriteResult({ "nInserted" : 1 })

    > db.person.find()

    { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }

    文档更新

    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 :可选,抛出异常的级别。

    上面udpate中的命令可以有:

    $set

    用来指定一个键并更新键值,若键不存在并创建。

    { $set : { field : value } }

    $unset

    用来删除一个键。

    { $unset : { field : 1} }

    $inc

    $inc可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作。

    { $inc : { field : value } }

    $push

    用法:

    { $push : { field : value } }

    把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去。

    $pushAll

    同$push,只是一次可以追加多个值到一个数组字段内。

    { $pushAll : { field : value_array } }

    $pull

    从数组field内删除一个等于value值。

    { $pull : { field : _value } }

    $addToSet

    增加一个值到数组内,而且只有当这个值不在数组内才增加。

    $pop

    删除数组的第一个或最后一个元素

    { $pop : { field : 1 } }

    $rename

    修改字段名称

    { $rename : { old_field_name : new_field_name } }

    $bit

    位操作,integer类型

    {$bit : { field : {and : 5}}}

    $each

    $ each修饰符可用于$ addToSet运算符和$ push运算符。用于执行批量操作。

    db.students.update(
       { name: "joe" },
       { $push: { scores: { $each: [ 90, 92, 85 ] } } }
    )

    $ slice
    $ slice修改器在$ push操作期间限制数组元素的数量。
    假如有一个这样的结构:
    { "_id" : 1, "scores" : [ 40, 50, 60 ] }
    执行如下语句:
    db.students.update(
       { _id: 1 },
       {
         $push: {
           scores: {
             $each: [ 80, 78, 86 ],
             $slice: -5
           }
         }
       }
    )
    那么结果是,执行完push之后,只留下后5条:
    { "_id" : 1, "scores" : [  50,  60,  80,  78,  86 ] }

     

    > db.person.insert({name:'xhj',age:30})

    WriteResult({ "nInserted" : 1 })

    > db.person.insert({name:'zzj',age:30})

    WriteResult({ "nInserted" : 1 })

    > db.person.find()

    { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }

    { "_id" : ObjectId("592ffe972108e8e79ea902b1"), "name" : "xhj", "age" : 30 }

    { "_id" : ObjectId("592ffe972108e8e79ea902b2"), "name" : "zzj", "age" : 30 }

    //更新年龄30的为31(尼玛又过了一年)

    > db.person.update({age:30},{$set:{age:31}})//这里注意 如果没有$set,那么db.person.update({age:30},{age:31}),表示把所有满足age=30的文档替换为{age:31}。而不是只更改age字段。是整个文档被替换了。

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    //因为默认的参数multi 为false 所以只更新了一条

    > db.person.find()

    { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 31 }

    { "_id" : ObjectId("592ffe972108e8e79ea902b1"), "name" : "xhj", "age" : 30 }

    { "_id" : ObjectId("592ffe972108e8e79ea902b2"), "name" : "zzj", "age" : 30 }

    //加上multi:true  这个就类似于关系型数据库的update

    > db.person.update({age:30},{$set:{age:31}},{multi:true})

    WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

    > db.person.find()

    { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 31 }

    { "_id" : ObjectId("592ffe972108e8e79ea902b1"), "name" : "xhj", "age" : 31 }

    { "_id" : ObjectId("592fff812108e8e79ea902b2"), "name" : "zzj", "age" : 31 }

    //根据单个记录的save来更新 这个时候要有_id作为主键 对单条数据进行更新的时候加了单独的save方法 而不是使用update({ "_id" :ObjectId("592ffd872108e8e79ea902b0")})这种方式。是把单条数据作为一个对象来看待了。

    > db.person.save({ "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 })

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    > db.person.find()

    { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }

    { "_id" : ObjectId("592ffe972108e8e79ea902b1"), "name" : "xhj", "age" : 31 }

    { "_id" : ObjectId("592fff812108e8e79ea902b2"), "name" : "zzj", "age" : 31 }

    文档删除

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

    db.collection.remove(

       <query>,

       <justOne>

    )

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

    db.collection.remove(

       <query>,

       {

         justOne: <boolean>,

         writeConcern: <document>

       }

    )

    参数说明:

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

    > db.person.find()

    { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }

    { "_id" : ObjectId("592ffe972108e8e79ea902b1"), "name" : "xhj", "age" : 31 }

    { "_id" : ObjectId("592fff812108e8e79ea902b2"), "name" : "zzj", "age" : 31 }

    > db.person.remove({age:31})

    WriteResult({ "nRemoved" : 2 })

    > db.person.find()

    { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }

    文档查询

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

    db.collection.find(query, projection)

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

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

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

    > db.person.find({name:'zjf'})

    { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }

    更新嵌入文档

    db.users.update(
       { "favorites.artist": "Pisanello" },
       {
         $set: { "favorites.food": "pizza", type: 0}
       }
    )
  • 相关阅读:
    数据结构学习8——二叉树的销毁
    单链表的反向
    LNK4098: 默认库“MSVCRT”与其他库的使用冲突
    动态链接库(VC_Win32)
    注册表操作(VC_Win32)
    消息钩子与定时器(VC_Win32)
    套接字编程(VC_Win32)
    线程概述,优先级,睡眠,创建及终止(VC_Win32)
    进程通信(VC_Win32)
    进程概述及创建,终止(VC_Win32)
  • 原文地址:https://www.cnblogs.com/xiaolang8762400/p/6930587.html
Copyright © 2011-2022 走看看