所以我遇到的问题是,我只想一次只喜欢用户评论,目前我正在使用addToSet运算符,因为根据定义,如果该值已经存在,它就不会增加值。
但是在我的情况下,它添加了,可能是因为我添加了对象而不是值,并且当我添加mongo时会生成_id?
这是我的活动模型:
@NgModule({
imports: [
CommonModule,
MediaRoutingModule,
MaterialModule
],
declarations: [LayoutComponent, MediaComponent],
exports: [
MediaComponent
]
})
export class MediaModule {
}
export {MediaComponent};
这是我的addLike函数:
creator: {
type: Schema.Types.ObjectId,
ref: 'User'
},
comments: [
{
user: {
type: Schema.Types.ObjectId,
ref: 'User'
},
text: {
type: String,
required: true
},
likes: [
{
user: {
type: Schema.Types.ObjectId,
ref: 'User'
}
}
]
}
]
}
当我添加likes时,我的likes数组如下所示:
commentLike: async (req, res) => {
console.log('working', req.params.id, req.params.idas, req.params.commentID);
Events.findOneAndUpdate(
{ _id: req.params.idas, comments: { $elemMatch: { _id: req.params.commentID } } },
{ $addToSet: { 'comments.$.likes': { user: req.params.id } } },
(result) => {
res.json(result);
}
);
}
答案 0 :(得分:1)
您可以按照这个
db.collection.update(
{ "_id": req.params.idas, "comments": { "$elemMatch": { "_id": req.params.commentID, "likes.user": { "$ne": req.params.id } } } },
{ "$push": { "comments.$.likes": { "user": req.params.id } } }
})
如果您刚开始您的项目,则应遵循JohnnyHK的意见,并使数组像这样使$addToSet
可行
likes: [{ type: Schema.Types.ObjectId, ref: 'User' }]
答案 1 :(得分:0)
另一种选择是更改架构定义以添加“ _id:false”,以防止为数组中的子文档生成_id字段。
在这种情况下,只要您的文档完全完全匹配,即使使用嵌套的子文档,$ addToSet也会按预期工作。
comments: [
{
user: {
type: Schema.Types.ObjectId,
ref: 'User'
},
text: {
type: String,
required: true
},
likes: [
{
_id: false, //add this
user: {
type: Schema.Types.ObjectId,
ref: 'User'
}
}
]
}
]