数组"/>
在猫鼬的已区分模型中更新数组
我有一个名为Person
的模型,该模型的鉴别符为"Worker"
,为它提供了数组的另一个locations
字段。
我正在尝试将一个元素推到locations数组上,而无需经历fetch / modify / save方法(因此以后我可以使用updateMany
同时更新多个文档)。
为什么在下面的代码中没有发生这种情况?我也尝试过findByIdAndUpdate
和findOneAndUpdate
。
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以获取更多信息。
更多推荐
在猫鼬的已区分模型中更新数组
发布评论