zoukankan      html  css  js  c++  java
  • MongoDB学习(操作集合中的文档)

    文档概念

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

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

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

    插入文档

    insert()方法

      要将数据插入到 MongoDB 集合中,可以使用 insert() 方法。

    db.collection_name.insert(document)

      

      其中test为集合名。如果数据库中不存在集合,则MongoDB将创建此集合,并将文档插入到该集合中。

      在插入的文档中,如果不指定 _id 参数,MongoDB会为此文档分配一个唯一的Object_id。

      _id 为集合中的每一个文档的12个字节的十六进制数。12 字节划分为:

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

      要在单个语句中插入多个文档,可以在 insert() 命令中传递文档数组。

    1 > db.test.insert([
    2 ... {name:"uzi",
    3 ... like:["MongoDB","JAVA","Database"],
    4 ... },
    5 ... {name:"957",
    6 ... parents:[{
    7 ... father:"letme",
    8 ... mather:"mlxg"}],}])
    添加代码

    save()方法

      要插入文档,也可以使用 db.collection_name.save() 方法。与 insert() 方法不同的是,当输入的id值相同时, insert() 方法无法插入,但 save() 方法会更新包含 该 id 值的文档的全部数据。

    insertOne()方法

      db.collection_name.insertOne() 方法将单个文档插入到集合中。如果没有指定 _id ,MongoDB会自动将添加。

      该方法会返回包含新插入的文档的 ”_id"字段值的文档。

    insertMany()方法

      db.collection_name.insertMany() 方法可以将多个文档插入到集合中。如果没有指定 _id,则自动添加ObjectId

    更新文档

    更新运算符

      在MongoDB中进行更新操作时,可以使用运算符进行文档数据的局部修改。

    运算符 描述 语法
    $set 更新字段的值,如果字段不存在则进行添加 { $set : { field : value } }
    $inc 

    将字段值增加指定的量

    { $inc : { field : value } }

    $rename

    重命名字段名(键名)

    { $rename : { field : value } }

    $unset

    删除指定的字段(键)

     { $unset : { field : "1" } }
    $setOnInsert

    在更新操作中新建文档时设置字段的值

    { $setOnInsert : { field : value } }
    $addToSet

    在已有数组中添加元素,如果元素存在则不操作

    { $addToSet : { field : value } }
    $pop

    删除数组的第一个或最后一个元素。如果值为“-1",则删除第一个元素;

    如果值为”1",则删除最后一个元素。

    { $pop : { field : value } }
    $push

    1.如果指定的键是数组则追加新的值;

    2.如果指定的键不是数组则无法成功执行

    3.如果不存在指定的字段(键)则创建数组类型的键值对

    { $push : { field : value } }
    $pushAll

    用法与 $push 类似,一次可以添加多个值到数组

    { $pushAll : { field : [ value1,value2,...] } }
    $pull

    从数组中删除指定值

    { $pull : { field : value } }
    $pullAll

    从数组中删除多个值,要删除的值是以数组指定的

    { $pullAll : { field : [ value1,value2,...] } }
    $each

    用于运算符$push和$addToSet 的限定符,用于在数组中添加多个单独的元素,防止直接添加进数组元素

     field : { $each : [ value1,...] }
    $slice

    用于运算符 $push 的限定符,用于限制更新后的数组长度

    field : { $slice : < num > }
    $sort

    用于运算符 $push 的限定符,用于将数组中的文档重新排序

     
    $bit

    对整数值执行按位与和或运算。

     

    更新方法 update()

      Collection 对象的 update() 方法可以更新集合中的文档。

        db.collection.update(    
            <query>, 
            <update>, 
            {       
                upsert: <boolean>,   
                multi: <boolean>,  
                writeConcern: <document>
            }
        )

       参数说明:

    •   query:查询条件,类似sql update查询内where后面的条件。
    •   update:要更新的内容和一些更新的操作符(如 $set...)等,类似sql update查询内set后面的参数。
    •   upsert:可选。参数upsert是个布尔值,如果为 true 且没有文档与查询匹配,则插入一个新文档;如果为 false 则不插入。 默认为 false。
    •   multi:可选。mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来的多条记录全部更新。
    •   writeConcern:可选。抛出异常的级别。

      注意:如果不使用运算符,则update内容不会进行局部修改,而是全局修改。

      示例:

        

     1 #将name为uzi的学生的age加5
     2 db.student.update({name:"uzi"},{$inc:{age:5}})
     3 
     4 #把uzi的sex改为boy
     5 db.student.update({name:"uzi"},{$set:{sex:"boy"}})
     6 
     7 #把uzi的like字段删除
     8 db.student.update({name:"uzi"},{$unset:{like:1}})
     9 
    10 #给uzi的添加别名dog
    11 db.student.update({name:"uzi"},{$push:{aname:"dog"}})
    12 
    13 #给uzi添加多个别名
    14 db.student.update({name:"uzi"},{$pushAll:{aname:["A1","A2"]}})
    15 
    16 #给uzi的别名数组里再添加一个数组
    17 db.student.update({name:"uzi‘},{$addToSet:{aname:["A3","A4"]}})
    18 
    19 #删除别名数组内第一个别名
    20 db.student.update({name:"uzi"},{$pop:{aname:-1}})
    21 
    22 #删除别名 A2
    23 db.student.update({name:"uzi"},{$pull:{aname:"A2"}})
    局部更新语句示例

    save() 方法

      save() 方法通过传入的文档来替换已有文档。语法格式如下:

        db.collection.save(    
            <document>,     
            {      
                writeConcern: <document> 
            }  
        )  
    •   document:文档数据
    •   writeConcern:可选。抛出的异常级别。

      无需指定query和update对象,直接将新文档替换掉原来的旧文档。它通过文档中的_id字段确定要修改的字段。

      如果集合中没有与传入文档的_id字段值相等的文档,则会添加新的文档。

      save() 函数的执行效率要低于update()。

    查看文档

      查看集合中的文档,可以使用find()方法。

      db.collection_name.find() 可以以非结构化的方式显示集合中的所有文档。

      db.collection_name.find().pretty() 可以以结构化的方式显示集合中的所有文档。

    删除文档

      remove()函数可以用来删除集合中的文档。

        db.collection_name.remove(     
            <query>,     
            {       
                justOne: <boolean>,
                writeConcern: <document> 
            } 
        )
    •   query:可选。删除的文档的条件。
    •   justOne:可选。如果为true 或 1,则只删除一个文档。默认为false。
    •   writeConcern:可选。抛出异常的级别。

      示例:

      注意:如果要删除集合中的全部文档,可以使用

    db.collection_name.remove({})
  • 相关阅读:
    SQL Server数据库高级进阶之事务实战演练
    ASP.NET Core使用Nginx搭建高可用分布式Web集群
    C#签名算法HS256和RS256实战演练
    ASP.NET (Core)WebApi参数传递实操演练
    基于Windows服务实现的亚马逊云S3文件上传
    ASP.NET Core WebApi如何动态生成树形Json格式数据
    SQL Server数据库高级进阶之分布式唯一ID生成实战演练
    ASP.NET Core WebApi分布式文件系统FastDFS实战演练
    .Net Core使用NLog记录日志到文件和数据库实战演练
    ASP.NET Core开源任务调度框架Hangfire实战演练
  • 原文地址:https://www.cnblogs.com/shangyang/p/10649786.html
Copyright © 2011-2022 走看看