admin管理员组

文章数量:815114

在猫鼬的已区分模型中更新数组

我有一个名为Person的模型,该模型的鉴别符为"Worker",为它提供了数组的另一个locations字段。

我正在尝试将一个元素推到locations数组上,而无需经历fetch / modify / save方法(因此以后我可以使用updateMany同时更新多个文档)。

为什么在下面的代码中没有发生这种情况?我也尝试过findByIdAndUpdatefindOneAndUpdate

index.js

const { connect } = require("mongoose");

const Person = require("./Person");

connect("mongodb://127.0.0.1:27017/test?gssapiServiceName=mongodb", {
  useNewUrlParser: true,
}, async () => {
  console.log("Database connected")
  const person = await Person.create(
    {
      __t: "Worker",
      name: "John", 
      locations: ["America"],
    },
  )

  console.log(person);
  // Outputs: 
  // {
  //   locations: [ 'America' ],
  //   _id: 5eba279663ecdbc25d4d73d4,
  //   __t: 'Worker',
  //   name: 'John',
  //   __v: 0
  // }

  await Person.updateOne(
    { _id: person._id }
    {
      $push: { locations: "UK" }, 
    },
  )

  const updated = await Person.findById(person._id);

  console.log(updated);
  // (Updating "locations" was unsuccessful)
  // Outputs: 
  // {
  //   locations: [ 'America' ],
  //   __t: 'Worker',
  //   _id: 5eba279663ecdbc25d4d73d4,
  //   name: 'John',
  //   __v: 0
  // }
});

Person.js

const { Schema, model } = require("mongoose");

const personSchema = Schema({
  name: String,
});

const Person = model("Person", personSchema);

Person.discriminator(
  "Worker",
  Schema({
    locations: [String],
  })
);

module.exports = Person;
回答如下:

我能够重现此问题,原来您需要启用useFindAndModify选项。您可以通过几种方法来执行此操作,一种方法是将其设置为opon连接:

mongoose.connect('mongodb://localhost/...', { useNewUrlParser: true, useFindAndModify: true });

检查this以获取更多信息。

本文标签: 在猫鼬的已区分模型中更新数组