【发布时间】:2020-11-01 03:09:43
【问题描述】:
我正在研究类似于此的猫鼬模式:
const actionSchema = {
actions: {
type: [{
actionName: {
type: String,
required: true
},
count: {
type: Number,
default: 0,
required: true
},
users: [{
type: Schema.Types.ObjectId,
ref: 'User'
}]
}]
}};
它是 post 模式的嵌套模式。 在这里,动作是动态生成的,执行该动作的人数由 count 维护,他们的身份由 users 数组维护。
如您所见,actions 是一个对象数组,其中还包含 users 数组。 我想检查提供的用户 ID 是否存在于任何操作对象中,然后将其从数组中删除并减少计数。
对于 mongoose 和 mongodb 来说是全新的,我看到的一种简单方法是使用必须更新的 Post.findById() 查找帖子,运行 js 循环,更新帖子并调用 .save()。但是当 users 数组有数千个用户 ID 时,它可能会非常昂贵。
我试过.update(),但不明白在这种情况下如何使用它。
向 Post 模型添加一个方法(如 postSchema.methods.removeUserAction)怎么样?这允许从this 访问文档并允许更新文档并因此调用.save()。它是否将完整的文档加载到客户端节点应用程序?
所以请提出正确的方法。 谢谢。
【问题讨论】:
标签: javascript node.js arrays mongodb mongoose