[英]How to check in JavaScript if object is in array with multiple objects?
[英]check if object in array of objects - javascript
我知道我必须使用some
但由于某种原因,我似乎无法正确使用。 我的 mongodb 帖子数据库中有一个集合。 每个帖子都有一个名为“likes”的对象数组,这些对象引用了喜欢这个帖子的用户。 所以在我的后端,我想检查用户是否存在于帖子的 likes 数组中。 如果它不存在,那么就像帖子一样,否则在我的反应前端返回一条适当的消息。 我将包含的代码总是从some
返回 false,因此用户可以无限次喜欢帖子。
exports.postLike = async (req, res, next) => {
const postId = req.query.postId;
const userId = req.query.userId;
console.log('postId: ' + postId);
try{
const post = await Post.findById(postId).populate('creator').populate('likes');
const user = await User.findById(userId);
if (!post.likes.some(post => post._id === user._id)){
post.likes.push(user);
console.log('liked a post');
const result = await post.save();
res.status(200).json({ message: 'Post liked!', post: result });
} else {
console.log('Post already liked!');
res.status(200).json({ message: 'Post already liked!', post: post });
}
}catch (err) {
if (!err.statusCode) {
err.statusCode = 500;
}
next(err);
}
};
我显然还没有理解, some
是如何工作的,所以如果你能提供帮助,那就太好了。 另外,如果您有任何其他在这种情况下有用的解决方案,请发布它。 我尝试了一些带有 indexOf 的随机代码并包含用于检查,但它也不起作用。 我不确定哪种方法是检查用户对象是否包含在“喜欢”对象数组中的正确方法。 我不想自己编写任何函数来检查这一点,我想使用 javascript 提供的现有函数/方法来完成它。
MongoDB.ObjectId
是MongoDB.ObjectId
数据的包装器,就像Number
或Boolean
。 就像
new Boolean(true) === new Boolean(true)
会是假的,你的比较也会失败。 您必须取出原语进行比较:
post._id.valueOf() === user._id.valueOf()
将在这里提供不同的路线。 您正在获取所有数据,包括与创建者的连接,并且喜欢向集合添加一个赞。 这有点浪费,可以通过仅进行update
并使用$addToSet来实现,如果它不存在,它将添加类似内容。
然后您只需检查nModified
中的nModified
以了解它是否已添加。 所以你可以有:
const result = await Post.updateOne(
{
id: 1
},
{
$addToSet: {
likes: {
userId: mongoose.Types.ObjectId(req.query.userId)
}
}
}
);
console.info(result.nModified === 1);
另外,您也可以使用some
使用如下===
比较类型和值:
posts.likes.some(like => like.userId.toString() === req.query.userId)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.