mongoose在创建schema的时候有些属性需要设置为数组类型,比如商品图片、商品标签、不同尺寸、价格等。

那么怎么查询具有某个标签的商品了,下面记录一下两种情况:

查询具有‘vue’标签的文章


1、数组中存储的是字符串元素

下面以个人博客数据来说明

  • 数据(labels 值为字符串数组)
[
{
labels: ["vue","react","mongoose"],
likeCount: 0,
lookCount: 0,
name: "手动封装一个渐变色进度条",
note: "UI小姐姐给了一个渐变色的滚动条,cv编程已经没用了,自己动手封装一个",
__v: 0,
_id: "5f1ac78aec91df5d76f877d6"
},
{
labels: ["mongoose"],
likeCount: 0,
lookCount: 0,
name: "手动封装一个渐变色进度条",
note: "UI小姐姐给了一个渐变色的滚动条,cv编程已经没用了,自己动手封装一个",
__v: 0,
_id: "5f1ac78aec91df5d76f877d6" },
{
labels: ["vue"],
likeCount: 0,
lookCount: 0,
name: "手动封装一个渐变色进度条",
note: "UI小姐姐给了一个渐变色的滚动条,cv编程已经没用了,自己动手封装一个",
__v: 0,
_id: "5f1ac78aec91df5d76f877d6"
}]
  • 查询
 Articles.find({ isPublish: 1, labels: { $elemMatch: { $eq: 'vue' } } }, (err, doc) => {})
2、数组中存储的是对象
  • 数据 (labels 值为对象数组)
[
{
labels: [{name:"vue"},{name"react"},{name"mongoose"}],
likeCount: 0,
lookCount: 0,
name: "手动封装一个渐变色进度条",
note: "UI小姐姐给了一个渐变色的滚动条,cv编程已经没用了,自己动手封装一个",
__v: 0,
_id: "5f1ac78aec91df5d76f877d6"
},
{
labels: [{name"mongoose"}],
likeCount: 0,
lookCount: 0,
name: "手动封装一个渐变色进度条",
note: "UI小姐姐给了一个渐变色的滚动条,cv编程已经没用了,自己动手封装一个",
__v: 0,
_id: "5f1ac78aec91df5d76f877d6" },
{
labels: [{name:"vue"}],
likeCount: 0,
lookCount: 0,
name: "手动封装一个渐变色进度条",
note: "UI小姐姐给了一个渐变色的滚动条,cv编程已经没用了,自己动手封装一个",
__v: 0,
_id: "5f1ac78aec91df5d76f877d6"
}]
  • 查询 写法1
 Articles.find({
isPublish: 1,
labels: { $elemMatch: { name: 'vue' } }
}, (err, doc) => {})
  • 查询 写法2
 Articles.find({ isPublish: 1, labels.name:'vue'}}, (err, doc) => {})

青浅个人博客:qingqian.site:9527

mongoose 查询数据属性为数组,且包含某个值的方法的更多相关文章

  1. 【MongoDB】查询字段对应的数组中包含某个值

    在MongoDB操作的时候,我们可能会遇到查询[字段对应的数组中包含某个值]的数据,查询语句如下,假设表名为user. 示例1 数据 { id: 1, state_arr: [ "123&q ...

  2. js 判断数组包含某值的方法 和 javascript数组扩展indexOf()方法

    var  questionId = []; var anSwerIdValue = []; ////javascript数组扩展indexOf()方法 Array.prototype.indexOf ...

  3. JavaScript判断数组是否包含指定元素的方法

    本文实例讲述了JavaScript判断数组是否包含指定元素的方法.分享给大家供大家参考.具体如下: 这段代码通过prototype定义了数组方法,这样就可以在任意数组调用contains方法 /** ...

  4. php合并数组并保留键值的方法

    答案:使用 + 连接两个数组,替换array_merge()函数. php合并数组,一般会使用array_merge方法. array_merge — 合并一个或多个数组 array array_me ...

  5. 如何高效判断java数组是否包含某个值

    在java中,我们如何判断一个未排序数组中是否包含一个特定的值?这在java中是一个频繁非常实用的操作.那么什么样的方法才是最高效的方式?当然 ,这个问题在Stack Overflow也是得票率非常高 ...

  6. PHP如何查找一列有序数组是否包含某值(二分查找)

    问题:对于一列有序数组,如何判断给出的一个值,该值是否存在于数组. 思路:判断是否存在,最简单是,直接循环该数组,对每一个值进行比较.但是对于有序数组来说,这样写就完全没有利用好“有序”这一特点. 所 ...

  7. 判断Java数组是否包含某个值

    下面给出四种方式,其中最有效率的还是loop方式,有兴趣的话可以测试一下: 代码如下: public boolean findStr(String[] args,String str){ boolea ...

  8. 判断js中数组是否包含某值

    可以用数组的includes函数判断数组中是否存在某个值.

  9. JS 判断一个数组是否包含某个值

    如下判断: return arrValues.indexOf('Sam') > -1

随机推荐

  1. Palindrome subsequence(区间dp+容斥)

    In mathematics, a subsequence is a sequence that can be derived from another sequence by deleting so ...

  2. 《Offer一箩筐》求职之前你必须知道的 4 件事!!

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」. 如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力! Hi~ 这里是 ...

  3. Splay 记录

    luogu 模板 P3391 [模板]文艺平衡树(Splay). 知识点:1.splay模板题,练习splay,rotate顺序:x变成z的儿子,x的一个儿子变为y的一个儿子(具体哪个看代码),y变为 ...

  4. cdispaly的Grid布局与Flex布局

    cdispaly的Grid布局与Flex布局 Gird 布局与 Flex 布局有一定的相似性,都是对容器的内部项目进行划分. Flex 布局是轴线布局,只能指定项目针对轴线的位置,可以看作成一维布局 ...

  5. leetcode刷题-52N皇后2

    题目 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击.给定一个整数 n,返回 n 皇后不同的解决方案的数量. 思路 与51题完全一致 实现 class ...

  6. 矩阵LU分解的MATLAB与C++实现

    一:矩阵LU分解 矩阵的LU分解目的是将一个非奇异矩阵\(A\)分解成\(A=LU\)的形式,其中\(L\)是一个主对角线为\(1\)的下三角矩阵:\(U\)是一个上三角矩阵. 比如\(A= \beg ...

  7. HTTP 协议类

    HTTP 协议的主要特点 简单快速:每个资源的URL是固定的 灵活:在每个 http 协议中都有一个头部分有一个数据类型,通过一个 http 协议就可以完成不同数据类型的传输 无连接:连接一次就好断掉 ...

  8. Solr专题(三)SSM项目整合Solr

    一.环境配置 所需要的jar包: org.apache.solr.solr-solrj maven依赖: <!-- https://mvnrepository.com/artifact/org. ...

  9. PHP相关的书签内容

    ThinkPHP函数详解 session方法 --ThinkPHP 开源PHP框架 ThinkPHP实现支付宝接口功能 - /折磨 - 博客园 php几个常用的概率算法(抽奖.广告首选) - 懒人技术 ...

  10. CentOS 7使用PuppeteerSharp无头浏览器注意事项

    环境: CentOS 7.6.1810 .net core 3.1 PuppeteerSharp 2.0.0 1.如网络部稳定可以提前下载需要的chromium 下载地址:https://storag ...