美文网首页
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 入门系列(八)

    为了避免篇幅过长产生阅读疲劳,数组的查询放在第八节 数组查询 新建mongodb-16.js,并输入以下代码 构建...

  • MonogoDB入门教程01

    注:本系列教程是自己学习的记录,内容来至 菜鸟教程MongoDB入门教程01MongoDB入门教程02MongoD...

  • MongoDB入门教程03

    注:本系列教程是自己学习的记录,内容来至 菜鸟教程MongoDB入门教程01MongoDB入门教程02MongoD...

  • MongoDB入门教程02

    注:本系列教程是自己学习的记录,内容来至 菜鸟教程MongoDB入门教程01MongoDB入门教程02MongoD...

  • MongoDB入门教程04

    注:本系列教程是自己学习的记录,内容来至 菜鸟教程MongoDB入门教程01MongoDB入门教程02MongoD...

  • MongoDB入门教程05

    注:本系列教程是自己学习的记录,内容来至 菜鸟教程MongoDB入门教程01MongoDB入门教程02MongoD...

  • SpringBoot入门建站全系列(二十六)Mongodb非关系

    SpringBoot入门建站全系列(二十六)Mongodb非关系型数据库的使用 一、概述 MongoDB 是一个基...

  • 《开发者头条》每日精选(8-4)

    系列文章:MongoDB 从入门到精通 codefrom.com by 狗狗侠 from booooom 大数据全...

  • MongoDB教程(初识篇)

    目录一、定义二、安装 系列教程MongoDB教程(入门篇) 一、定义 1、MongoDB是什么 一个基于分布式文件...

  • MongoDB 新手入门 - Aggregation

    本文是 MongoDB 新手入门 系列的第二篇,在本文中,我们将会讲解 MongoDB 的聚合框架,在看完本文后,...

网友评论

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

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