因此,我对Node.js和javascript真的很陌生,并且对NOSQL数据库没有太多经验。因此,我不太确定执行以下任务的正确方法是什么。
使用Schema.findByIdAndUpdate,如何在不向数据库中添加不必要的数据的情况下正确更新嵌套的模式对象。
这是我们的示例架构,
let OuterSchema = new mongoose.Schema({
name: String,
stuff: {
type: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "InnerSchema"
}
],
required: true,
default: void 0,
validate: v => v.length > 0
}
});
let InnerSchema = new mongoose.Schema({
name: {
type: String,
required: true
}
});
这是我想到的 PUT 请求
/**
* e.g. expected JSON body format
* {
"name": "Updated name outer schema", // can remove field if no update required
"stuffs": [
{
"_id": "5b710854f2dafbf9fbe3c088",
"name": "Updated name inner schema",
} // can remove field if no update required
]
}
*/
function updateOuterSchema(req, res) {
for (var i = 0; i < req.body.stuffs.length; i++) {
InnerSchema.findByIdAndUpdate(
req.body.stuffs[i]._id,
{ $set: req.body.stuffs[i] },
{ runValidators: true },
(err, innerSchema) => {
// abort if there is an error
if (err) return;
}
);
}
let options = {
new: true,
runValidators: true
};
OuterSchema.findByIdAndUpdate(req.params.id, { $set: req.body }, options, (err, outerSchema) => {
if (err) {
res.status(400).send(err);
} else {
res.send(outerSchema);
}
});
}
但是,我希望有一个更好的方法,因为这样做有很多潜在的问题。
场景1
场景2