为了避免篇幅过长产生阅读疲劳,数组的查询放在第八节
数组查询
- 新建
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');
- 构建并启动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 }
数组查询日常所以比较频繁,需要多加练习,加深记忆
网友评论