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

Logo

前往低代码交流专区

更多推荐