返回介绍

find 的数组查询

发布于 2024-12-09 12:55:35 字数 3668 浏览 0 评论 0 收藏 0

// 重新加载一遍数据
> 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文