zoukankan      html  css  js  c++  java
  • UK Day46 MongoDB 文档基本操作 增删改查

    1. 创建

      1.1:向集合中添加一个文档db.collection_name.insertOne()

      • db.Animals.insertOne({
        	name: "pig", 
        	age: 3, 
        	tags: ["black", "white"], 
        	size: {height:13, weight:20.12} 
        })
        

      1.2:向集合中添加多个文档db.collection_name.insertMany()

      • db.Animals.insertMany([
           {name: "dog", age:1, tags: ["black"], size:{ height:10, weight:15} },
           {name: "bee", age:9, tags: ["yellow"], size:{ height:20.1, weight:25.2} },
           {name: "rabbit", age:5, tags: ["white"], size:{ height:30.3, weight:35} }
        ])
        
    2. 查询

      2.1:查看指定集合内的所有的数据:db.collection_name.find()。(返回一个数组

      • 如果数据过多查看不方便,可以使用 db.collection_name.find().pretty() 命令来调整格式。

      • 我们在上面操作的时候,往 Animals (即 collection )中插入了数据(即 document 文档)。 因为没有给文档指定 _id 属性,所以数据库为文档自动添加了 _id field(域) ,并且值类型是 ObjectId(blablabla) (即文档的唯一标识,类似于MySQL中的 primary key)。

      • MongoDB中的数字, 默认情况下是 double 类型。如果存整型, 必须使用函数 NumberInt(整型数字)

      2.2:查询指定集合集合中第一个文档:db.collection_name.findOne()。(返回一个对象

      2.3:$in:查询满足 $in:[] 里面任意一个元素的数据;如果有多个查询条件,则用逗号分开。(只能查询单值)

      • 命令:db.collection_name.find({$or: [{key1: value1}, {key2: value2},{...}, ...]})

      • Eg:

        // db.Animals.find( { age: { $in: [ 1, 3 ] } } )
        // or: 
        // db.Animals.find( { age: { $in: [ 3,1 ] } } )
        db.Animals.find( { 
        age: { $in: [ 1,3 ] } 
        } )
        

      2.4:$or:查询满足 $or:[] 中任意一个字段的数据。

      • 命令:db.collection_name.find({$or: [{key1: value1}, {key2: value2},{...}, ...]})

      • Eg:

        // db.Animals.find({$or: [{age: 1}, {name: "pig"}]}) 
        
        db.Animals.find({
        $or: [{age: 1}, {name: "pig"}]
        })
        

      2.5:$all:查询同时满足 $all:[] 中所有元素的数据。

      • 命令: db.collection_name.find( { key: { $all:["value1" , "value2",.. ] } } ).pretty()

      • Eg: db.Animals.find( { tags: { $all:["white" , "black" ] } } ).pretty()

      2.6:分页查询:使用 limit 关键字。

      • Eg:db.Animals.find().limit(2) (查询 Animals 集合中的前2条记录) 。

      2.7:find() + skip() + limit() 方法。

      • Eg: db.Animals.find().skip(1).limit(3) (查询第2页的3条记录,结合skip()方法,skip(x)是跳过前x条记录)。
    3. 修改

      • 常用修改器:为 $set (赋值)和 $unset (取消赋值)。

      • 修改指定字段的值,使用 Update() 方法修改field对应数据的其他内容。Eg:db.Animals.update({name:"pig"},{$set:{tags:["white","grey"]}}) ,修改成功如下图所示。注意:update()方法更新时只会更新一个文档,就是说,如果同时存在多条匹配的数据,默认只修改第一条;如果需要修改所有符合条件的数据,则需要写成:db.Animals.update({name:"pig"},{$set:{tags:["white","grey"]}},{multi:true})

      • $inc 修改器:对某列值进行加或减操作。

        • Eg:db.Animals.update({ "_id": ObjectId("61841ca6f46f59630e817360") }, { $inc: { "age":-2 }})。(Animals集合中对应该id的数据中,age减去2)

      • 如果修改一条不存在的数据不会报错,会给出未修改的信息 WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 })

        • Eg: db.Animals.update({age:100},{age:100,name:"pig"})

    4. 删除

      • 删除集合内所有数据。

        • Eg:db.Animals.remove({}) (删除Animals集合中所有数据)。

        • Eg:db.Animals.remove({age:1}) (集合中所有满足 age:1的数据都会被删除。)

      • 删除单个文档: db.collection.deleteOne()

      • 从数据库中删除一个集合:db.collection_name.drop()

      • 删除数据库:db.dropDatabase()

      • 删除所有匹配的文档。

        • Eg:db.Animals.deleteMany( { gender : { $lt : 50 } } )
      • PS:一般数据库中的数据都不会真正意义上的删除,会添加一个字段来表示这个数据是否被删除。

    5. 排序

      • 查询排序:在查询文档内容的时候, 默认是按照 _id 排序。

      • 升序排序:db.Animals.find().sort({age:1})。( 根据age的值进行升序排序)

      • 降序排序:db.Animals.find().sort({age:-1})。(根据age的值进行降序排序)

    6. 投影

      • 作用:指定查询字段。(有时我们对文档进行查询并不是需要所有字段, 比如只需要用到id的情况,这时候我们可以对文档进行投影)

      • 语法:db.collection_name.find(option_query,{key1:1, key2:0, ...})。(key表示要查询/隐藏的字段。key为1表示显示该字段,key为0表示隐藏该字段)

      • Eg:db.Animals.find({},{"age":1, _id:0})

        • 该语句表示:用投影查询集合中所有文档的 age 字段。

        • _id 为0表示隐藏 _id 字段,因为在执行 find() 方法时 _id 字段是始终显示的。

    7. 异常捕捉处理:try catch

      • 如果某条数据插入失败, 将会终止插入, 但已经插入成功的数据不会回滚掉。所以批量插入由于数据较多容易出现失败。解决办法: 用 try catch 进行异常捕捉处理,测试的时候可以不处理。

      • 语法:

        try {
        	code……
        } 
        catch (e) {
          print (e);
        }
        
  • 相关阅读:
    源码学习-出差有感
    《java数据结构与算法》系列之“快速排序"
    新征途
    命运总是喜欢开玩笑
    《java数据结构与算法》系列之“简单排序"-冒泡,选择,插入
    秒杀9种排序算法(JavaScript版)
    《进击的巨人》
    Noip2001 提高组 T3
    Noip2011 提高组 Day1 T1 铺地毯 + Day2 T1 计算系数
    Noip2012 提高组 Day1 T1 Vigenère 密码
  • 原文地址:https://www.cnblogs.com/OFSHK/p/15546784.html
Copyright © 2011-2022 走看看