gpt4 book ai didi

javascript - mongodb/mongoose findOneandUpdate 如何获取索引和删除对象

转载 作者:行者123 更新时间:2023-12-03 01:27:23 25 4
gpt4 key购买 nike

所以我有事件对象,其中有评论,评论有喜欢数组。我目前可以做的是将 like 添加到事件对象的 comments 数组中。

我的架构看起来与此类似:

  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 函数中做到这一点。但这就是问题所在,我想做的另一件事与评论不同,我在弄清楚如何从喜欢数组中获取用户索引以便我可以将该索引切出时遇到了麻烦,目前我的函数如下所示:

  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,但它删除了整个事件对象。

最佳答案

所以我通过使用拉操作符设法做到了。正在运行删除评论之类的功能

  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);
}
);
}
};

关于javascript - mongodb/mongoose findOneandUpdate 如何获取索引和删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51466022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com