美文网首页
MongoDB 入门系列(八)

MongoDB 入门系列(八)

作者: 郁南 | 来源:发表于2020-07-03 00:01 被阅读0次

    为了避免篇幅过长产生阅读疲劳,数组的查询放在第八节

    数组查询

    1. 新建mongodb-16.js,并输入以下代码
    var workmate1={
      name:'JSPang',
      age:33,
      sex:1,
      job:'前端',
      skill:{
          skillOne:'HTML+CSS',
          skillTwo:'JavaScript',
          skillThree:'PHP'
      },
      regeditTime:new Date(),
      interest:['看电影','看书','吃美食','钓鱼','旅游']
    }
    
    var workmate2={
      name:'ShengLei',
      age:31,
      sex:1,
      job:'JAVA后端',
      skill:{
          skillOne:'HTML+CSS',
          skillTwo:'J2EE',
          skillThree:'PPT'
      },
      regeditTime:new Date(),
      interest:['篮球','看电影','做饭']
    }
    
    var workmate3={
      name:'MinJie',
      age:18,
      sex:0,
      job:'UI',
      skill:{
          skillOne:'PhotoShop',
          skillTwo:'UI',
          skillThree:'PPT'
      },
      regeditTime:new Date(),
      interest:['做饭','画画','看电影']
    }
    var workmate4={
      name:'XiaoWang',
      age:25,
      sex:1,
      job:'UI',
      skill:{
          skillOne:'PhotoShop',
          skillTwo:'UI',
          skillThree:'PPT'
      },
      regeditTime:new Date(),
      interest:['写代码','篮球','画画']
    }
    var workmate5={
      name:'LiangPeng',
      age:28,
      sex:1,
      job:'前端',
      skill:{
          skillOne:'HTML+CSS',
          skillTwo:'JavaScript',
      },
      regeditTime:new Date(),
      interest:['玩游戏','写代码','做饭']
    }
    
    var workmate6={
      name:'HouFei',
      age:25,
      sex:0,
      job:'前端',
      skill:{
          skillOne:'HTML+CSS',
          skillTwo:'JavaScript',
      },
      regeditTime:new Date(),
      interest:['化妆','读书','做饭']
    }
    
    var workmate7={
      name:'LiuYan',
      age:35,
      sex:0,
      job:'美工',
      skill:{
          skillOne:'PhotoShop',
          skillTwo:'CAD',
      },
      regeditTime:new Date(),
      interest:['画画','聚会','看电影']
    }
    
    
    var workmate8={
      name:'DingLu',
      age:20,
      sex:0,
      job:'美工',
      skill:{
          skillOne:'PhotoShop',
          skillTwo:'CAD',
      },
      regeditTime:new Date(),
      interest:['美食','看电影','做饭']
    }
    
    var workmate9={
      name:'JiaPeng',
      age:29,
      sex:1,
      job:'前端',
      skill:{
          skillOne:'HTML+CSS',
          skillTwo:'JavaScript',
          skillThree:'PHP'
      },
      regeditTime:new Date(),
      interest:['写代码','篮球','游泳']
    }
    
    var workmate10={
      name:'LiJia',
      age:26,
      sex:0,
      job:'前端',
      skill:{
          skillOne:'HTML+CSS',
          skillTwo:'JavaScript',
          skillThree:'PHP'
      },
      regeditTime:new Date(),
      interest:['玩游戏','美食','篮球']
    }
    
    
    
    var db=connect('company');
    var workmateArray=[workmate1,workmate2,workmate3,workmate4,workmate5,workmate6,workmate7,workmate8,workmate9,workmate10];
    db.workmate.insert(workmateArray);
    print('[SUCCESS]:The data was inserted successfully');
    
    1. 构建并启动mongo
    PS D:\Code\Test\Others\MongoDB> mongo .\mongodb-16.js
    MongoDB shell version v3.4.4
    connecting to: mongodb://127.0.0.1:27017
    MongoDB server version: 3.4.4
    connecting to: mongodb://127.0.0.1:27017/company
    MongoDB server version: 3.4.4
    [SUCCESS]:The data was inserted successfully
    

    然后启动mongo

    基本查询

    > db.workmate.find({interest:['画画','聚会','看电影']},     {name:1,interest:1,age:1,_id:0}  )
    { "name" : "LiuYan", "age" : 35, "interest" : [ "画画", "聚会", "看电影" ] }
    

    可以看到符合条件的只有一条
    如果只查询一个条件

    > db.workmate.find({interest:['看电影']},
    ...     {name:1,interest:1,age:1,_id:0}
    ... )
    >
    

    可以看到查询到的为空,问题就在于我们写了一个中括号([]),因为加上中括号就相当于完全匹配了,所以没有得到一条符合查询条件的数据。我们去掉中括号再看看结果。

    > db.workmate.find({interest:'看电影'},
    ...     {name:1,interest:1,age:1,_id:0}
    ... )
    { "name" : "JSPang", "age" : 33, "interest" : [ "看电影", "看书", "吃美食", "钓鱼", "旅游" ] }
    { "name" : "ShengLei", "age" : 31, "interest" : [ "篮球", "看电影", "做饭" ] }
    { "name" : "MinJie", "age" : 18, "interest" : [ "做饭", "画画", "看电影" ] }
    { "name" : "LiuYan", "age" : 35, "interest" : [ "画画", "聚会", "看电影" ] }
    { "name" : "DingLu", "age" : 20, "interest" : [ "美食", "看电影", "做饭" ] }
    

    所以,如果只是想查询一个条件,就用字符串条件,而不是数组条件
    $all-数组多项查询
    用$all修饰符,是需要满足所有条件的

    db.workmate.find(
        {interest:{$all:["看电影","看书"]}},
        {name:1,interest:1,age:1,_id:0} 
    )
    

    $in-数组的或者查询
    $in主要满足数组中的一项就可以被查出来(有时候会跟or弄混)

    db.workmate.find(
        {interest:{$in:["看电影","看书"]}},
        {name:1,interest:1,age:1,_id:0} 
    )
    

    $size-数组个数查询
    $size修饰符可以根据数组的数量查询出结果

    db.workmate.find(
        {interest:{$size:5}},
        {name:1,interest:1,age:1,_id:0} 
    )
    

    $slice-显示选项
    有时候我并不需要显示出数组中的所有值,而是只显示前两项,就可以下面这样做

    db.workmate.find(
        {},
        {name:1,interest:{$slice:2},age:1,_id:0} 
    )
    

    如果我们想显示兴趣的最后一项,可以直接使用slice:-1,来进行查询。

    db.workmate.find(
        {},
        {name:1,interest:{$slice:-1},age:1,_id:0} 
    )
    

    find参数

    • query:这个就是查询条件,MongoDB默认的第一个参数。
    • fields:(返回内容)查询出来后显示的结果样式,可以用true和false控制是否显示。
    • limit:返回的数量,后边跟数字,控制每次查询返回的结果数量。
    • skip:跳过多少个显示,和limit结合可以实现分页。
    • sort:排序方式,从小到大排序使用1,从大到小排序使用-1。
      明白了上面这些选项,现在可以作一个最简单的分页,我们把同事集合(collections)进行分页,每页显示两个,并且按照年龄从小到大的顺序排列。
    > use company
    switched to db company
    > db.workmate.find({},{name:true,age:true,_id:false}).limit(0).skip(2).sort({age:1});
    { "name" : "DingLu", "age" : 20 }
    { "name" : "DingLu", "age" : 20 }
    { "name" : "XiaoWang", "age" : 25 }
    { "name" : "HouFei", "age" : 25 }
    { "name" : "XiaoWang", "age" : 25 }
    { "name" : "HouFei", "age" : 25 }
    { "name" : "LiJia", "age" : 26 }
    { "name" : "LiJia", "age" : 26 }
    { "name" : "LiangPeng", "age" : 28 }
    { "name" : "LiangPeng", "age" : 28 }
    { "name" : "JiaPeng", "age" : 29 }
    { "name" : "JiaPeng", "age" : 29 }
    { "name" : "ShengLei", "age" : 31 }
    { "name" : "ShengLei", "age" : 31 }
    { "name" : "JSPang", "age" : 33 }
    { "name" : "JSPang", "age" : 33 }
    { "name" : "LiuYan", "age" : 35 }
    { "name" : "LiuYan", "age" : 35 }
    

    数组查询日常所以比较频繁,需要多加练习,加深记忆

    相关文章

      网友评论

          本文标题:MongoDB 入门系列(八)

          本文链接:https://www.haomeiwen.com/subject/guxjqktx.html