【问题标题】:How to match key inside an array of object in Mongodb using mongoose [duplicate]如何使用猫鼬在Mongodb中匹配对象数组中的键[重复]
【发布时间】:2021-05-08 14:34:48
【问题描述】:

一个文档包含一个对象数组每个对象都包含一个键我想在猫鼬中找到与键匹配的所有对象。 以下是示例架构:

const TalentSchema = new mongoose.Schema({
name: String,
  dev_task: [
        {
          development_training: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'TrainingModule',
          },
          developlink: String,
        },
      ],  
})

我想将具有 development_training 的文档与给定的 ID 相匹配。 我该怎么做?

更新: 样本数据

[
  {
    "name": "name1",
    "dev_task": [
      {
        "development_training": 1,
        "developlink": ""
      },
      {
        "development_training": 2,
        "developlink": ""
      }
    ]
  },
  {
    "name": "name2",
    "dev_task": [
      {
        "development_training": 1,
        "developlink": ""
      }
    ]
  },
]

它应该返回这个:-

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "dev_task": [
      {
        "developlink": "",
        "development_training": 1
      }
    ],
    "name": "name1"
  },
  {
    "_id": ObjectId("5a934e000102030405000001"),
    "dev_task": [
      {
        "developlink": "",
        "development_training": 1
      }
    ],
    "name": "name2"
  }
]

【问题讨论】:

  • 你的意思是this 吗?
  • 是的,这正是我想要的。
  • 不客气,我也发布了一个解释它的答案,以防它对其他用户有用。

标签: javascript mongodb typescript mongoose


【解决方案1】:

正如docs 中解释的那样,mongo 使用点表示法。

MongoDB 使用点符号来访问数组的元素并访问嵌入文档的字段。

这正是我们想要的。

所以要访问您的文档,您需要以这种方式在查找查询中执行dev_task.development_training:

db.collection.find({
  "dev_task.development_training": 1
})

例如here

注意,使用 mongoose 是同一个查询:

yourModel.findOne({"dev_task.development_training": yourId}).then(result => {/*...*/})

【讨论】:

  • 嘿,J.F 我有一个疑问。此查询返回至少有一个具有“dev_task.development_training”的对象的所有对象: 1 它还返回具有两个具有不同 dev.task.development_training 的对象的数组。请检查我刚刚更新的问题!
猜你喜欢
  • 1970-01-01
  • 2021-05-13
  • 2022-01-16
  • 2022-01-24
  • 2019-06-21
  • 2019-05-30
  • 2022-01-16
  • 1970-01-01
  • 2015-12-28
相关资源
最近更新 更多