文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
find 的数组查询
// 重新加载一遍数据
> load('./demo8.js')
connecting to: mongodb://127.0.0.1:27017/user
MongoDB server version: 3.6.3
The data was inserted successfully
true
基本数据查询
// 查询 skill 是['react','vue','css3']数据
> db.student.find(
... {skill:['react','vue','css3']},
... {name:1,skill:1,_id:0}
... )
{ "name" : "zhangsan", "skill" : [ "react", "vue", "css3" ] }
下面我们想查找 skill 中有 react 的学生。
db.student.find( {skill:['react']}, {name:1,skill:1,_id:0} )
运行后,并没有得到相应的学生数据。那问题出现在哪里呢?问题就在于:我们写了一个中括号([]),加上中括号就相当于完全匹配了,所以没有得到一条符合查询条件的数据,我们去掉中括号再看看结果。
> db.student.find( {skill:'react'}, {name:1,skill:1,_id:0} )
{ "name" : "wangwu", "skill" : [ "jquery", "react", "html" ] }
{ "name" : "zhangsan", "skill" : [ "react", "vue", "css3" ] }
以上就是我们在数组中查询一项的方法。
$all 修饰符
$all
修饰符用于数据多项查询。
// 查询 skill 中既有 react 和 vue 的学生
> db.student.find( {skill:{$all:['react','vue']}}, {name:1,skill:1,_id:0} )
{ "name" : "zhangsan", "skill" : [ "react", "vue", "css3" ] }
$in 修饰符
用 $all
修饰符,是需要满足所有条件才可以, $in
修饰符是只要满足数组中的一项就可以被查出来(有时候会跟 $or
弄混)。
// 查询 skill 中有 react 或者 vue 的学生
> db.student.find( {skill:{$in:['react','vue']}}, {name:1,skill:1,_id:0} )
{ "name" : "wangwu", "skill" : [ "jquery", "react", "html" ] }
{ "name" : "xiaohong", "skill" : [ "vue", "css", "html" ] }
{ "name" : "zhangsan", "skill" : [ "react", "vue", "css3" ] }
$size 修饰符
$size
修饰符可以根据数组长度来检索。
// 查询 skill 有 5 项的学生
> db.student.find( {skill:{$size:5}}, {name:1,skill:1,_id:0} )
{ "name" : "wangwu", "skill" : [ "san", "vue", "jquery", "react", "html" ] }
$slice 修饰符
只显示每个学生的 skill 的前两项。
> db.student.find(
... {},
... {name:1,skill:{$slice:2},age:1,_id:0}
... )
{ "name" : "lisi", "age" : 10, "skill" : [ "js", "css" ] }
{ "name" : "wangwu", "age" : 12, "skill" : [ "san", "vue" ] }
{ "name" : "xiaohong", "age" : 13, "skill" : [ "vue", "css" ] }
{ "name" : "xiaohua", "age" : 12, "skill" : [ "webpack", "node" ] }
{ "name" : "zhaoliu", "age" : 12, "skill" : [ "node", "js" ] }
{ "name" : "xiaoli", "age" : 12, "skill" : [ "http", "npm" ] }
{ "name" : "xiaoliu", "age" : 12, "skill" : [ "ES6", "ES7" ] }
{ "name" : "zhangsan", "age" : 12, "skill" : [ "react", "vue" ] }
{ "name" : "lihua", "age" : 12, "skill" : [ "san", "echarts" ] }
{ "name" : "xiaozhang", "age" : 12, "skill" : [ "ES6", "css3" ] }
只显示每个学生的 skill 的最后一项。
> db.student.find( {}, {name:1,skill:{$slice:-1},age:1,_id:0} )
{ "name" : "lisi", "age" : 10, "skill" : [ "html" ] }
{ "name" : "wangwu", "age" : 12, "skill" : [ "html" ] }
{ "name" : "xiaohong", "age" : 13, "skill" : [ "html" ] }
{ "name" : "xiaohua", "age" : 12, "skill" : [ "html" ] }
{ "name" : "zhaoliu", "age" : 12, "skill" : [ "webpack" ] }
{ "name" : "xiaoli", "age" : 12, "skill" : [ "html5" ] }
{ "name" : "xiaoliu", "age" : 12, "skill" : [ "ES8" ] }
{ "name" : "zhangsan", "age" : 12, "skill" : [ "css3" ] }
{ "name" : "lihua", "age" : 12, "skill" : [ "html5" ] }
{ "name" : "xiaozhang", "age" : 12, "skill" : [ "html5" ] }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论