我在官方文档中找不到有关如何处理删除引用文档的任何指南。请考虑以下示例:
const UserSchema = new mongoose.Schema({
name: { type: String },
children: [ { type: mongoose.Schema.Types.ObjectId, ref: 'Child' } ]
}, { collection: 'users' });
mongoose.model('User', UserSchema);
const ChildSchema = new mongoose.Schema({
name: { type: String }
}, { collection: 'children' });
mongoose.model('Child', ChildSchema);
假设您需要删除User X子数组的索引0上的子项:
const userX = await Users.find(queryForFindingX);
await userX.children[0].remove();
await userX.save();
这样做,我希望Mongoose删除孩子的实际文档,并将其从userX子数组中删除。而是删除了子文档,但保留了User children数组中的条目。
因此,为了实现预期的目标,我还必须从userX子数组中提取子ID。
我还可以直接删除子文档,然后提取UserX的引用。
我还可以在子架构中创建一个中间件删除操作,以在Users集合中搜索引用并将其提取。
但是推荐的方法是什么?为什么?为什么?!通过执行userX.children[0].remove()