zoukankan      html  css  js  c++  java
  • mongoDB文档操作【增删改】

    MongoDB 插入文档

    文档的数据结构和JSON基本一样。

    所有存储在集合中的数据都是BSON格式。

    BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。

    插入文档

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

    db.COLLECTION_NAME.insert(document)

      插入时如果没有指定文档的Object ID,MongoDB会指定唯一的ObjectID。 

      如果集合不存在,mongodb会自动创建集合。

    例如:

    > show dbs    #显示所有数据库
    exam   0.078GB
    local  0.078GB
    test   0.078GB
    > db.colle1.insert({"name":"qlq","age":25})  #插入文档
    WriteResult({ "nInserted" : 1 })
    > show dbs    #显示所有数据库
    exam   0.078GB
    local  0.078GB
    test   0.078GB
    > db    #查看当前数据库
    test
    > show tables  #查看所有集合
    colle1
    runoob
    system.indexes
    test

    也可以将文档定义为一个变量之后存进去:

    > document=({title:"test"})  #定义变量
    { "title" : "test" }
    > db.colle1.insert(document)  #将变量存进去
    WriteResult({ "nInserted" : 1 })
    >

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

     

    3.2 版本后还有以下几种语法可用于插入文档:

    •  db.collection.insertOne():向指定集合中插入一条文档数据
    •  db.collection.insertMany():向指定集合中插入多条文档数据
    > var document = db.collection.insertOne({"a": 3})
    > document
    {
            "acknowledged" : true,
            "insertedId" : ObjectId("571a218011a82a1d94c02333")
    }
    
    #  插入多条数据
    > var res = db.collection.insertMany([{"b": 3}, {'c': 4}])
    > res
    {
            "acknowledged" : true,
            "insertedIds" : [
                    ObjectId("571a22a911a82a1d94c02337"),
                    ObjectId("571a22a911a82a1d94c02338")
            ]
    }

    MongoDB 查询文档

    > show tables
    system.indexes
    > db.colle1.insert({name:'qlq',age:20})
    WriteResult({ "nInserted" : 1 })
    > show collections
    colle1
    system.indexes
    > db.colle1.find()
    { "_id" : ObjectId("5ab458e7bf43055cd737bd8e"), "name" : "qlq", "age" : 20 }

      发现mongodb自动给维护了一个ObjectID

    1.简单查询

    db.colle1.find()

    再次插入一条查询:

    > db.colle1.insert({name:'wjy',age:21})
    WriteResult({ "nInserted" : 1 })
    > db.colle1.find()
    { "_id" : ObjectId("5ab458e7bf43055cd737bd8e"), "name" : "qlq", "age" : 20 }
    { "_id" : ObjectId("5ab45dd7bf43055cd737bd8f"), "name" : "wjy", "age" : 21 }

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

    修改单个:

    > db.colle1.find()
    { "_id" : ObjectId("5ab458e7bf43055cd737bd8e"), "name" : "qlq", "age" : 20 }
    { "_id" : ObjectId("5ab45dd7bf43055cd737bd8f"), "name" : "wjy", "age" : 21 }
    > db.colle1.update({},{name:'qlq1'})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.colle1.find()
    { "_id" : ObjectId("5ab458e7bf43055cd737bd8e"), "name" : "qlq1" }
    { "_id" : ObjectId("5ab45dd7bf43055cd737bd8f"), "name" : "wjy", "age" : 21 }

    解释;

    db.colle1.update({},{name:'qlq1'}) 语句的query语句虽然没有写,会查到所有数据,但是只会修改第一条数据。而且update帮我们把整个文档替换了,只有objectid没有变。

    解决办法:只修改指定属性而不替换整个文档:

    原来数据:

    > db.colle1.find()
    { "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "wjy", "age" : 21 }
    { "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq", "age" : 21 }

    修改数据的指定属性:在上面基础上加上{$set:    }

    > db.colle1.update({},{$set:{name:'qlq1'}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.colle1.find()
    { "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq1", "age" : 21 }
    { "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq", "age" : 21 }

    修改多个:

    > db.colle1.update({},{$set:{name:'qlq4'}},false,true)
    WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
    > db.colle1.find()
    { "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq4", "age" : 21 }
    { "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq4", "age" : 21 }

      修改多个需要使用$set,且设置multi的值为true。

    save() 方法

    save() 方法通过传入的文档来替换已有文档。如果不存在就添加数据,如果存在就替换数据。语法格式如下:

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

    参数说明:

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

    实例

    1.save保存不存在的数据:

    > db.colle1.find()
    { "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq4", "age" : 21 }
    { "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq4", "age" : 21 }
    > db.colle1.save({name:'qlq',age:21})
    WriteResult({ "nInserted" : 1 })
    > db.colle1.find()
    { "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq4", "age" : 21 }
    { "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq4", "age" : 21 }
    { "_id" : ObjectId("5ab463d6bf43055cd737bd92"), "name" : "qlq", "age" : 21 }

    2.传入ObjectId修改已经存在的数据:

    > db.colle1.save({"_id":ObjectId("5ab463d6bf43055cd737bd92"),name:'qlq44',age:21})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.colle1.find()
    { "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq4", "age" : 21 }
    { "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq4", "age" : 21 }
    { "_id" : ObjectId("5ab463d6bf43055cd737bd92"), "name" : "qlq44", "age" : 21 }

    更多实例

    只更新第一条记录:

    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 删除文档

    MongoDB remove()函数是用来移除集合中的数据。

    MongoDB数据更新可以使用update()函数。在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。

    语法

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

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

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

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

    参数说明:

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

    实例

    删除单个:

    > db.colle1.find()
    2018-03-23T10:43:40.696+0800 I NETWORK  trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
    2018-03-23T10:43:40.696+0800 I NETWORK  reconnect 127.0.0.1:27017 (127.0.0.1) ok
    { "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq4", "age" : 21 }
    { "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq4", "age" : 21 }
    { "_id" : ObjectId("5ab463d6bf43055cd737bd92"), "name" : "qlq44", "age" : 21 }
    > db.colle1.remove({name:'qlq44'},{justOne:true})     #删除单个
    WriteResult({ "nRemoved" : 1 })
    > db.colle1.find()
    { "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq4", "age" : 21 }
    { "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq4", "age" : 21 }

    如果不指定justOne会删除符合条件的多个:

    > db.colle1.find()
    { "_id" : ObjectId("5ab46bbeeee8eb99039a98e4"), "name" : "qlq3", "age" : 25, "sex" : "男" }
    { "_id" : ObjectId("5ab46bc9eee8eb99039a98e5"), "name" : "qlq4", "age" : 25, "sex" : "男" }
    { "_id" : ObjectId("5ab46bd6eee8eb99039a98e6"), "name" : "qlq4", "age" : 26, "sex" : "男" }
    > db.colle1.remove({name:"qlq4"})
    WriteResult({ "nRemoved" : 2 })
    > db.colle1.find()
    { "_id" : ObjectId("5ab46bbeeee8eb99039a98e4"), "name" : "qlq3", "age" : 25, "sex" : "男" }

    删除所有:

    > db.colle1.find()
    { "_id" : ObjectId("5ab460eebf43055cd737bd90"), "name" : "qlq4", "age" : 21 }
    { "_id" : ObjectId("5ab460f4bf43055cd737bd91"), "name" : "qlq4", "age" : 21 }
    > db.colle1.remove({})                 #删除所有
    WriteResult({ "nRemoved" : 2 })
    > db.colle1.find()
  • 相关阅读:
    JWT(JSON WEB TOKEN) / oauth2 / SSL
    Guice 学习
    九 fork/join CompletableFuture
    二 lambda表达式
    IDEA 热部署 + 下载jar包放到maven中
    微服务学习一 微服务session 管理
    一 Optional
    八 线程池(待续)
    七 内置锁 wait notify notifyall; 显示锁 ReentrantLock
    六 多线程问题
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/8626764.html
Copyright © 2011-2022 走看看