• MongoDB 添加、查询(条件查询、排序、分页、返回指定字段)、修改、删除数据


    MongoDB内部支持JavaScript语法,使用SpiderMonkey作为内部的JavaScript解释器引擎。

    1、常用命令

    • show databases:显示数据库列表
    • use:切换数据库
    • show collections:显示数据库列表
    • show users:显示当前数据库的用户列表
    • show roles:显示当前数据库的角色列表

    连接MongoDB

    mongo‐‐host ‐‐port

    在这里插入图片描述

    1、添加数据

    添加数据并不需要像mysql一样,必须要先创建表

    1.1、insertOne/insert单条插入

    插入单条数据

    db.集合.insertOne()

    示例:

    1. 不指定 _id
      db.member.insertOne({"name":"张三","age":18,"create":new Date()})
      
      • 1
      db.member.insert({"name":"李四1","age":18,"create":new Date()})
      
      • 1
      在这里插入图片描述
      不指定主键,MongoDB将默认创建一个主键,字段固定为_id,ObjectId 前四个字节代表了主键生成的时间,精确到秒。主键ID在客户端驱动生成,一定程度上代表了顺序性,但不保证顺序性,可以通过ObjectId(“id值”).getTimestamp() 获取创建时间。
      在这里插入图片描述
    2. 指定 _id
      db.member.insertOne({"_id":1,"name":"张三","age":18,"create":new Date()})
      
      • 1
      在这里插入图片描述

    acknowledged : true,标识插入成功
    insertedId:返回创建的id

    1.2、insertMany多条插入数据

    1. json数组插入多条数据

      db.member.insertMany([{"_id":2,"name":"李四","age":18,"create":new Date()},{"_id":3,"name":"王五","age":18,"create":new Date()}])
      
      • 1

      在这里插入图片描述

    2. 脚本的方式插入多条数据

      var names = ['张一','张二'];
      
      var members = [];
      
      var member ={};
      
      for(var i=0;i<2;i++){
       var member ={name:names[i],"age":[i],"create":new Date()};
       members.push(member);
      };
      db.member.insertMany(members);
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

      在这里插入图片描述

    2、查询

    2.1、查询全部数据

    db.集合名.find()
    例如查询:member集合中所有数据

    db.member.find()
    
    • 1

    在mongo shell中默认显示20条数据,输入it命令读取下一批;当在Navicat中会一次性返回;
    在这里插入图片描述

    在这里插入图片描述

    2.2、指定条件查询

    注意find查询条件中是一个对象

    • 查询age=18
      db.member.find({age:18});
      
      • 1
      在这里插入图片描述
    • 查询 _id>2 并且 age =18
      db.member.find({_id :{$gt: 2}, age:18});
      
      • 1
      在这里插入图片描述

    2.3、排序

    sort中对象的值

    • -1 是降序
    • 1是升序
    db.member.find({_id :{$gt: 2}}).sort({_id:-1});
    
    • 1

    在这里插入图片描述

    2.4、分页

    skip:跳过指定记录数

    limit:返回结果数量

    db.member.find().skip(1).limit(5);
    
    • 1

    跳过第1条,一共查询3条数据
    在这里插入图片描述

    2.5、返回指定字段

    0代表不显示,1代表显示。

    注意:_id默认是显示的,只有_id不显示是设置0,其他字段都不可以设置0

    find({查询条件,可以空},{显示的字段:1})
    在这里插入图片描述

    2.6、查询操作符

    mongo操作符描述对比mysql
    $eq等值比较,find({_id :{ $eq: 1}}) 等价于 find({_id : 1})id = 1
    $ne不等于指定值,find({_id :{ $ne: 1}})id != 1 或 id<> 1
    $in数组中包含 ,find( { _id :{ $in: [ 1,2 ] } } )id in ( 1,2 )
    $nin数组中不包含,find( { _id :{ $nin: [ 1,2 ] } } )id not in ( 1,2 )
    $gt大于指定值,find({_id :{$gt: 1}})id > 1
    $get大于等于指定值,find({_id :{$gte: 1}})id >= 1
    $lt小于指定值,find({_id :{$lt: 1}})id < 1
    $lte小于等于指定值,find({_id :{$lte: 1}})id <= 1
    $and与(并且)查询,find({$and:[ { _id:{ $gt:1} },{ _id:{ $lt:4} } ]})id > 1 and id < 4
    $or或查询,find({$or:[ { _id:1 },{ _id: 3} ]})id = 1 or id= 3
    $not非查询,非小于3的数据 find({_id :{$not :{ $lt: 3 } } })id >= 3
    $nor即非查询,find( { $nor: [ { _id: 1 }, { _id: 2 }, { _id: 3 }] } )(id != 1 and id !=2 and id !=3)
    $all同时包含,查询tag同时包含3和9的数据,tag是一个数组,find({tag:{$all:[3,9]}}),可查看下面示例
    $elemMatch有一个元素匹配即可,find({job:{$elemMatch:{city:‘beijing’,company:‘xiaomi’}}}),可查看下面示例
    $size匹配数组大小,find({tag:{$size:3}}),可查看下面示例
    $slice返回数组中第几个元素,find({job:{KaTeX parse error: Expected 'EOF', got '}' at position 43: …ompany:'baidu'}}̲},{name:1,job:{slice:1}}),可查看下面示例
    • $all查询

      db.member.insertMany([{name:"A",tag:[1,2,3],age:18},{name:"B",tag:[3,5,9],age:19}]);
      db.member.find({tag:{$all:[3,9]}})
      
      • 1
      • 2

      在这里插入图片描述

    • $elemMatch查询
      匹配嵌套数组中至少有一个对象完全匹配

      db.member.insertMany([{name:"C",job:[{city:"beijing",company:'baidu'},{city:"shenzhen",company:'huawei'}],age:18},{name:"D",job:[{city:"beijing",company:'xiaomi'}],age:19}])
      
      db.member.find({job:{$elemMatch:{city:'beijing',company:'baidu'}}})
      
      db.member.find({job:{$elemMatch:{city:'beijing',company:'huawei'}}})
      
      db.member.find({job:{$elemMatch:{city:'beijing',company:'xiaomi'}}})
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      在这里插入图片描述

    • $size,匹配嵌套的数组大小
      在这里插入图片描述

    • $slice

      • 值 > 0,返回数组的几个元素
      • 值 < 0,返回数组的倒数几个元素
        在这里插入图片描述

    3、修改

    db.集合.update(query, update, options)

    参数说明

    • query:更新的查询条件
    • update:要更新的内容
    • options:更新的选项

    操作符

    操作符格式描述
    $set{ $set : { filed : value} }指定一个键,并更新值
    $unset{ $unset : { filed : 1} }删除一个键
    $inc{ $inc : { filed : value} }对数值类型进行增减
    $push{ $push : { filed : value} }将数值追加到数组中,若数组不存在则会进行初始化
    $pushAll{ $pushAll : { filed : value_array} }追加多个值到数组内
    $pull{ $pull : { filed : value} }从数组中删除指定元素
    $addToSet{ $addToSet : { filed : value} }添加元素到数组中,具有排重功能
    $pop{ $pop : { filed : 1} }删除数组第一个或最后一个
    $rename{ $rename : { old_filed_name : new_filed_name } }修改地段名称
    $bit{ $bit : { filed : {and :5} } }位操作,integer类型

    3.1、更新单个文档

    更新_id等于3的名字

    db.member.update({_id:3},{$set:{name:‘张五1’}})

    db.member.updateOne({_id:3},{$set:{name:‘张五1’}})

    在这里插入图片描述

    3.2、multi更新多个文档

    更新多个文档需要设置 multi选项 :true默认情况下mongo update命令在更新第一个文档后就返回。

    db.member.update({age:19},{$set:{ name:‘zhang1’}},{‘multi’:true});

    db.member.updateMany({age:19},{$set:{ name:‘zhang33’}})

    在这里插入图片描述

    3.3、upsert更新的字段不存在则插入

    upsert选项为true:如果更新文档不存在则创建文档,如果文档存在字段不存在则创建字段,都存在则更新

    db.member.update({_id:3}, { $set:{ address :‘北京’} } ,{upsert:true})

    在这里插入图片描述

    3.4、findAndModify查询和修改

    查询并修改指定值,注意先返回结果,后更新,返回的结果是旧数据

    db.member.findAndModify({query:{name:‘张1’} , update:{ $set:{ ‘age’:18 } } })

    在这里插入图片描述

    查询并修改指定值,并返回新值

    db.member.findAndModify({query:{name:‘张1’} , update:{ $set:{ ‘age’:18 } } })

    在这里插入图片描述

    4、删除数据

    4.1、删除单个文档

    db.member.deleteOne({_id:2})

    在这里插入图片描述

    remove命令会删除匹配条件的全部文档,删除单个文档,可以根据_id 或者唯一值删除。

    db.member.remove({name:‘张1’})

    在这里插入图片描述
    如果希望明确删除一个文档,需要指定justOne参数

    db.member.remove({age:19},true)

    在这里插入图片描述

    4.2、删除多个文档

    db.member.remove({age:19})

    db.member.deleteMany({age:19})

    在这里插入图片描述

    4.3 删除全部文档

    db.member.remove({})

    db.member.deleteMany({})

    db.member.drop()

    remove与deleteMany是对查询范围内的数据逐条删除,drop是删除整个集合(包括全部索引)drop更高效

    4.5、删除并返回删除的数据findOneAndDelete

    remove和deleteMany只能按照默认顺序删除,并返回确认信息。findOneAndDelete可以指定顺序删除文档和返回删除的内容

    删除并返回

    db.member.findOneAndDelete({age:18})

    在这里插入图片描述

    删除指定排序的数据

    db.member.findOneAndDelete({age:18},{sort:{_id:-1}})

    在这里插入图片描述

  • 相关阅读:
    冲量在线出席2022第五届中国信息技术应用创新大会,同与会嘉宾分享基于信创隐私计算一体机促进数据要素市场化的解决方案
    iOS——KVO底层学习
    2022数字技能职业教育生态研讨会
    关于响应式编程ReactiveX,RxGo
    java计算机毕业设计在线专业培养方案系统源码+mysql数据库+系统+lw文档+部署
    数据采集:数据挖掘的基础
    Redis新数据类型(Bitmaps,HyperLoglog,Geospatial)命令简介与案例演示
    软件项目验收测试报告-软件项目验收流程
    如何确定论文研究方向,看了很多论文还是没有头绪?
    10.4 认识Capstone反汇编引擎
  • 原文地址:https://blog.csdn.net/Extraordinarylife/article/details/126295359