• MongoDB 4.0.10 CRUD操作(增删改查)


    • 新增:当向集合插入文档时,如果没有给文档指定_id属性(可以自行指定),则数据库会自动为文档添加一个_id,该属性用来作为文档的唯一标识,可以使用ObjectId()生成
    • 一次性插入大量数据:可以先把所有数据放在一个新数组中,然后一次性插入数组
     1 /* <collection>集合名,doc是需要插入的对象
     2 db.<collection>.insert(doc)      向当前数据库的集合中插入一个或多个文档,doc为一个json对象或者json对象的List列表
     3 db.<collection>.insertOne(doc)   向当前数据库的集合中 插入一个文档,doc为一个json对象
     4 db.<collection>.insertMany(doc)  向当前数据库的集合中插入多个文档,doc为json对象的List列表
     5 */
     6 // 示例如下
     7 db.runoob.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个Nosql数据库', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 1200 });
     8 var doc1 = {title: 'HTML 教程', description: 'HTML编写网页', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['HTML', 'JavaScript', 'CSS'], likes: 1010 }
     9 var doc2 = {title: 'ASP.NET 教程', description: 'ASP.NET编写网页', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['Web Froms', 'Web API', 'MVC', 'WCF'], likes: 1000 }
    10 var doc3 = {title: 'JAVA 教程', description: 'JAVA编写网页', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['JSP', 'Spring'], likes: 1560}
    11 db.runoob.insert([doc1,doc2,doc3]); //一次性插入多个数据
    12 db.runoob.find()
    • 删除:remove()方法不会真正的释放空间,需要继续执行db.repairDatabase()回收磁盘空间
    1 /* db.<collection>.remove(<query>,<option>)   删除所有符合条件的文档,默认情况删除多个
    2 option:justOne为true时,只删除一个,默认为false;writeConcern:抛出异常的级别
    3 db.<collection>.remove({})        删除集合的所有文档,传递的是一个空参数,这是一条条删除,性能较低
    4 db.<collection>.deleteOne()       删除一个符合条款的文档
    5 db.<collection>.deleteMany()      删除所有的符合条件的文档
    6 */
    7 db.runoob.remove({_id:ObjectId("5d352450b595146edeaac430")})
    8 db.runoob.remove({by:"菜鸟教程"},true) //只删除一个
    9 db.runoob.find()
    • 修改
     1 /* 如果需要修改指定属性,需要使用 修改操作符 $set:用来修改文档中的指定属性;$unset:用来删除文档中的指定属性
     2 db.<collection>.update(<query>,<update>,<options>)  使用新对象替换符合查询条件的旧对象,当有多个符合条件的对象,默认只修改一个
     3 <query>:查询条件,类似where语句;<update>:新文档,类似于update语句中的set,需要使用修改操作符
     4 <options>:可选配置
     5     upsert:为true时,如果没有匹配到符合的文档,则进行插入,默认false;
     6     multi:为true时,可以一次性修改所有符合条件的文档;
     7     writeConcern:抛出异常的级别
     8 可以修改可选参数配置的multi:true
     9 db.<collection>.updateMany()     同时修改多个符合条件的文档
    10 db.<collection>.updateOne()      修改一个符合条件的文档
    11 db.<collection>.replaceOne()     替换一个文档
    12 db.<collection>.save(doc)         保存文档
    13 save()方法接受一个键值对对象作为参数,如果指定的文档已经存在于数据库中,就将其更新为指定的值,否则插入一个文档,应该是根据_id匹配
    14 */
    15 db.runoob.update({title:"MongoDB 教程"},{by:"新菜鸟教程"})                     // 直接把{by:"新菜鸟教程"}替换到旧文档中了
    16 db.runoob.update({title:"HTML 教程"},{$set:{url:"new url"},$inc:{likes:100}})    // set url="new url",likes+=100
    17 db.runoob.update({title:"ASP.NET 教程"},{$unset:{url:""}})                    // 移除url属性
    18 db.runoob.updateMany({by:"菜鸟教程"},{$set:{by:"新菜鸟教程"}})                  // 修改全部符合条件文档
    19 db.runoob.update({by:"新菜鸟教程"},{$set:{by:"菜鸟教程"}},{multi:true})          // 修改全部符合条件文档
    20 db.runoob.find()
    • 查询
     1 /* 传递的参数是筛选条件 {字段名:字段值} 等同 where 字段名=字段值
     2 db.<collection>.find(query, projection)          查询集合中所有符合条件的文档,返回一个数组
     3 db.<collection>.findOne(query, projection)       查询集合中所有符合元素的第一个文档,返回一个对象
     4 db.<collection>.find(query, projection).count()  返回集合中所有符合元素的文档的数量,返回一个数字
     5 db.<collection>.find(query, projection).pretty() 查询集合中所有符合条件的文档,格式化显示
     6 query:查询条件;projection:使用投影操作符指定显示的字段
     7 */
     8 db.runoob.find()               //select * from runoob
     9 db.runoob.find({})             //select * from runoob
    10 db.runoob.find({_id:ObjectId("5d352450b595146edeaac430")})     // select * from runoob where _id=ObjectId("5d352450b595146edeaac430")
    11 db.runoob.find({by:"菜鸟教程",title:"MongoDB 教程"})             // select * from runoob where by="菜鸟教程" and title="MongoDB 教程"
    12 db.runoob.findOne({by:"菜鸟教程"})                  // select TOP 1 * from runoob where by="菜鸟教程"
    13 db.runoob.findOne({title:"MongoDB 教程"})._id           // 返回一个值=(select _id from runoob where title="MongoDB 教程")
    14 db.runoob.find({}).count()                                     // select COUNT(1) from runoob
    15 //select title from runoob where title="HTML 教程" {title:1,_id:0} 1代表显示,0代表不显示
    16 db.runoob.find({title:"HTML 教程"},{title:1,_id:0})
    17 
    18 db.runoob.distinct("tags",{by:"菜鸟教程"})     // 查找by="菜鸟教程"的tags属性组合为一个数组,且去重
    19 db.runoob.find({"key.chl":values})            // 查找子文档属性key下的chl属性为values的文档
    • Update():修改新值使用的修改修饰符
     1 $inc              // 增加
     2 $rename            // 重命名某一列
     3 $serOnInsert      // 当upsert为true时,并进行insert操作时,可以补充的字段
     4 $set              // 用来修改文档中的指定属性
     5 $unset             // 用来删除文档中的指定属性
     6 db.runoob.update({title:"HTML 教程"},{$set:{url:"new url"},$inc:{likes:100}})      // set url="new url",likes+=100
     7 db.runoob.update({title:"ASP.NET 教程"},{$rename:{url:"newurl"}})                   // 重命名某一列,将url列改为newurl
     8 // 如果没有符合条件的文档,则直接插入该文档
     9 db.runoob.update({title:"CSS 教程"},{$set:{description:"CSS learn"},$setOnInsert:{by:"菜鸟教程"}},{upsert:true})
    10 db.runoob.updateMany({by:"菜鸟教程"},{$set:{by:"新菜鸟教程"}})                     // 修改全部符合条件文档
    11 db.runoob.update({title:"ASP.NET 教程"},{$unset:{url:""}})                        // 移除url属性
    12 $addToSet       // 在既有数组上添加元素,格式为 {$addToSet:{key:value}},key为数组类型的属性
    13 $pop            // 删除数组的第一个元素或最后一个元素,格式为 {$pop:{key:1/-1}},key为数组类型的属性;为1时删除第一个元素,为-1时删除最后一个元素
    14 $pullAll        // 从数组中删除多个值,格式为 {$pullAll:{key:[value1,value2...]}}
    15 $pull           // 从数组中删除符合查询条件的文档,格式为 {$pull:{key:<query>}}
    16 $push           // 在数组中添加一个元素,对于简单数组,格式为 {$push:{key:add_value}};对于对象数组,格式为 {$push:{key:{field:add_value}}}
    17 $each           // 在数组添加多个元素,格式为 {key:{$each:[value1,value2...]}},{$push:{key:{$each:[value1,value2...]}}},$push和$addToSet的限制符
    18 $slice          // 用于限制更新后的数组长度,格式为 {key:{$slice:<num>}},$push的限制符
    19 $sort           // 用来将数组中的文档重新排序,$push的限制符
    20 $bit            // 对整数值执行按位与和或元素,格式为 {$bit:{key:{and:<int>}}},使用and、or、XOR
    • 查询表达式
      • 条件操作符:$gt:>大于;$lt:<小于;$gte:>=大于等于;$lte:<=小于等于;$ne:!=不等于;$eq:=等于;$in:in;$nin:not in;$all:指数组所有单元匹配;$size:判断数组类型的属性长度;$elemMatch:判断数组类型属性或者判断子文档数组中的字段
      • 逻辑操作符:$or:or或者;$and:and;$not:not;$nor:指所有的列举条件都不应成功则为真;
      • 元素运算符:$exists:某列存在则为真;$mod:满足某求余条件则为真;$type:匹配字段的数据类型,并返回结果
      • limit()方法:接受一个数字参数,该参数指定从MongoDB中读取的记录条数
      • skip()方法:来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数
      • sort()方法:通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列
      • JS运算符:$where:js表达式为真则为真;$regex:正则表达式匹配为真则为真
     1 db.col.find({key:value})                           // 等于 {<key>:<value>} where key=value
     2 db.col.find({key:{$lt:1000}})                      // 小于 {<key>:{$lt:<value>}} where key<1000
     3 db.col.find({key:{$lte:1000}})                     // 小于等于 {<key>:{$lte:<value>}} where key<=1000
     4 db.col.find({key:{$gt:1000}})                      // 大于 {<key>:{$gt:<value>}} where key>1000
     5 db.col.find({key:{$gte:1000}})                     // 大于等于 {<key>:{$gte:<value>}} where key>=1000
     6 db.col.find({key:{$ne:1000}})                      // 不等于 {<key>:{$ne:<value>}} where key!=1000
     7 db.col.find({key:{$gt:40,$lt:50}})                 // where key>40 and key<50
     8 db.col.find({key:{$in:[value1,value2...]}})        // where key in (value1, value2)
     9 db.col.find({key:{$nin:[value1,value2...]}})       // where key not in (value1, value2)
    10 dd.col.find({key:{$all:[value1,value2...]}})       // 匹配key中包含value1,value2...元素的文档
    11 db.col.find({key:{$size:N}})                       // key属性为数组类型,匹配key数组长度为N的文档
    12 
    13 db.col.find({key1:value1, key2:value2})                      // and操作 where key1=value1 and key2=value2
    14 db.col.find({$and:[{key:{$gte:100}},{key:{$lte:500}}]})      // and操作 where key>=100 and key<=500
    15 db.col.find({$or:[{key1: value1},{key2:value2}]})            // or操作 where key1=value1 or key2=value2
    16 db.col.find({key1:value1,$or:[{key2:value2},{key3:value3}]}) // where key1=value1 and (k2=v2 or k3=v3)
    17 db.col.find({key:{$not:{$in:[10,12,13]}}})                   // where key not in(10,12,13)
    18 db.col.find({$nor:[{key1:value1}, {key2:value2},....]})      // where key1!=value1 and key2!=value2.....
    19 
    20 db.col.find({key:/教/})      // 查询key字段包含"教"字的文档 where key like '%教%'
    21 db.col.find({key:/^教/})     // 查询key字段以"教"字开头的文档 where key like '%教'
    22 db.col.find({key:/教$/})     // 查询key字段以"教"字结尾的文档 where key like '教%'
    23 
    24 db.col.find({key:{$exists:1}})            // 不为0时匹配key属性存在的文档;为0时匹配key属性不存在的文档
    25 db.col.find({key:{$mod:[5,0]}})           // 匹配key%5=0的文档
    26 db.col.find({key: {$type : 2}})           // 匹配key字段中数据类型为string的文档
    27 db.col.find({key: {$type : 'string'}})    // 匹配key字段中数据类型为string的文档
    28 
    29 db.col.find().limit(10)       // 取符合条件的前10条文档
    30 db.col.find().limit(10).skip(10)  // 跳过前10条文档,取第11-20条文档
    31 db.col.find().sort({key:1})     //查询出的结果安装key字段升序排列
    32 //skip(), limit(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()
    33 //skip()和limit()可以用于少量数据的分页,但是对于大数据情况下,假设查询第100001条数据,这条数据的key值是:2399927
    34 db.col.sort({key:1}).skip(100000).limit(10)             //183ms,按key升序排列,跳过前100000条文档,取10条文档
    35 db.col.find({key:{$gt:2399927}}).sort({"amount":1}).limit(10)  //53ms,取大于key的文档,排序,取10条
    36 
    37 db.col.find({$where:'this.likes>1000'}) // 匹配col集合中的likes>1000的文档,效率低
    38 db.col.find({key:{$regex:正则表达式}})   // 匹配key属性中符合正则表达式的文档
    • 配置数据库连接错误处理 
     1 mongo = new Mongo('localhost:27017')          // 连接服务器
     2 test = mongo.getDB('test')                     // 获取数据库test
     3 // 配置数据库连接错误处理 
     4 // w:指定数据库错误连接写入的等级(-1 忽略网络错误、0 不要求进行写入确认、1 要求写入确认、2 要求已写入到副本集的主节点和从节点、majority 要求已经写入复制集绝大数服务器)
     5 // wtimeout:等待时间,单位毫秒
     6 // j:布尔值,如果为true,则写入请求将会等到日记同步完成后返回
     7 // fsync:布尔值,如果为true,则写入请求将会等到日记fsync完成后返回
     8 test.runCommand({getLastError:1,w:1,j:true,wtimeout:1000});    
     9 test.auth('DEV','123456')                      // 身份验证
    10 numcoll = test.getCollection('numbers')        // 获取集合numbers
    11 numcoll.insert({num:30000})                    // 插入数据
    12 result = test.runCommand({getLastError:1})
    13 if(result.err){
    14     print(result.err)
    15 }
  • 相关阅读:
    AngularJS入门教程
    mobile web retina 下 1px 边框解决方案
    Python字典猜解
    20145313exp9
    20145313张雪纯Exp8 Web基础
    20145313张雪纯exp7
    20145313张雪纯信息搜集与漏洞扫描
    计算机病毒静态分析2
    计算机病毒静态分析1
    20145313张雪纯MSF基础应用实验
  • 原文地址:https://www.cnblogs.com/My-Sun-Shine/p/13511114.html
Copyright © 2020-2023  润新知