javascript - 检查对象数组中的对象 - javascript
问题描述
我知道我必须使用some
,但由于某种原因,我似乎无法正确使用。我的 mongodb 帖子数据库中有一个集合。每个帖子都有一个名为“likes”的对象数组,这些对象引用了喜欢这个帖子的用户。所以在我的后端,我想检查用户是否存在于帖子的 likes 数组中。如果它不存在,那么就像帖子一样,否则在我的反应前端返回适当的消息。我将包含的代码始终返回 false ,some
因此用户可以无限次喜欢帖子。
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
是一个原语的包装器,就像Number
or一样Boolean
。就像
new Boolean(true) === new Boolean(true)
将是错误的,您的比较也会失败。您必须取出原语进行比较:
post._id.valueOf() === user._id.valueOf()
推荐阅读
- c# - 如果 jsonpath 表达式的计算结果为 true,如何使 SelectTokens() 选择根元素
- android - 两个recyclerviews的Android ItemTouchHelper
- python - 如何将base64图像转换为图像并保存到文件系统
- angular - 后台 Firebase 消息处理。(角度)
- javascript - 在rails6中提交表单时添加参数
- elixir - 什么会导致 argon2_elixir 在测试期间加载问题
- reactjs - 找不到页面时@Loadable 组件动态导入显示错误
- python - Keras 模型产生恒定的零输出
- jquery - 如何用新值刷新 dropdown-menu.inner li
- html - 屏幕调整大小时将元素贴近段落的单词