mongoose 查询数据属性为数组,且包含某个值的方法

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

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值