猫鼬删除参考/链接文档的最佳实践

时间:2019-05-21 10:10:03

标签: mongodb mongoose

我在官方文档中找不到有关如何处理删除引用文档的任何指南。请考虑以下示例:

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()

直接对引用进行操作时,猫鼬不会删除该引用

0 个答案:

没有答案