首页 > 解决方案 > 查询对象数组以检查它是否包含 mongoose 中的字符串数组

问题描述

说我的数据库中有以下内容:

knights
  {
    name: 'Knightley',
    skills: [
      { name: 'sword', level: 2 },
      { name: 'shield', level: 1 }
    ]
  },
  {
    name: 'Cowardly',
    skills: [
      { name: 'sword', level: 1 },
      { name: 'shield', level: 5 }
    ]
  }

我想用剑和盾的技能归还所有骑士。像这样的东西(伪):

Knight.find({ skills.name: which contains ['sword', 'shield'] })

我该如何做这种查询?谢谢!

标签: javascriptnode.jsmongodbmongoosemongoose-schema

解决方案


您需要使用运算符$elemMatch在数组内部查找$in

db.collection.find({
  skills: {
    $elemMatch: {
      name: { $in: ["sword", "shield"] }
    }
  }
})

输出

[
  {
    "name": "Knightley",
    "skills": [
      {
        "level": 2,
        "name": "sword"
      },
      {
        "level": 1,
        "name": "shield"
      }
    ]
  },
  {
    "name": "Cowardly",
    "skills": [
      {
        "level": 1,
        "name": "sword"
      },
      {
        "level": 5,
        "name": "shield"
      }
    ]
  }
]

在这里检查


推荐阅读