所以我有一个事件对象,该对象具有注释,而注释具有likes数组。 我目前可以做的是在事件对象的注释数组中添加类似内容。
我的架构与此类似:
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'
}
}
]
}
]
}
我当前的“添加到评论”功能看起来像这样:
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 } } },
{ $push: { 'comments.$.likes': { user: req.params.id } } },
(result) => {
res.json(result);
}
);
}
参数:idas- event._id,commentID:评论ID,ID:user._id
问题在于我可以添加无尽的赞,因为我没有逻辑操作来检查用户是否已经喜欢它,并且我真的很挣扎,在此findoneandupdate函数中无法做到这一点。但这就是问题,我想做的另一件事是与评论不同,而林先生对于如何从Likes数组中获取用户索引以便于可以将其切出的内容搞不清,目前我的功能如下所示:
deleteLike: 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 } } },
{
$push: {
'comments.$.likes': {
$each: [],
$slice: 0 //there instead of 0 should be user index
}
}
},
(result) => {
res.json(result);
}
);
}
在此函数上,我还使用findoneandupdate函数,这可能不是一个好主意吗?试图使用findandremove,但是它删除了整个事件对象。
答案 0 :(得分:1)
因此,我通过使用pull运算符设法做到了。 工作删除评论,如功能
deleteLike: 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 } } },
{
$pull: { 'comments.$.likes': { user: req.params.id } }
},
(result) => {
res.json(result);
}
);
}
};