MongoDB-查找和更新数组对象

时间:2019-01-24 17:48:47

标签: mongodb mongoose mongoose-schema

我正在尝试更新对象,但是在更新对象时遇到了问题。请检查方案:

const personSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
  },
  teachers: [
    {
      name: {
        type: String,
      },
      information: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'info',
      }],
    },
  ],

我需要在此方案中更新我正在尝试做的信息(创建的是创建的对象):

const person = await ctx.models.person
    .findOneAndUpdate({
      teachers: {
        $elemMatch: {
          teachers: {
            _id: input.processId,
          },
        },
      },
    },
    {
      $push: {
        teachers: {
          information: created,
        },
      },
    }, {
      new: true,
    });

1 个答案:

答案 0 :(得分:0)

首先,按照MongoDb官方文档的建议docs,您不需要$ elemMatch:

  

如果在$ elemMatch表达式中仅指定一个条件,则无需使用$ elemMatch。

除此之外,我建议使用点号进行搜索。您的代码将如下所示:

const person = await ctx.models.person
    .findOneAndUpdate({
      "teachers._id" : input.processId
    },
    {
      $push: {
        teachers: {
          information: created,
        },
      },
    }, {
      new: true,
    });