【发布时间】:2020-10-12 00:48:04
【问题描述】:
我正在使用 nodejs 创建一个 API,并且我有以下数据集
[ { _id: 5ef054487c20460017dcbde8,
post_data: 'paw nisa dmme vahi ponnaya',
likes: 2,
commentsCount: 0,
post_img: null,
isUserLiked: false,
usersLiked: [ 5eef7fc55de48230887f3aa3 ],
exp_date: 2020-06-27T00:00:00.000Z,
has_img: false,
user_id: [ [Object] ],
typology: 'post',
geometry:
{ pintype: 'Point',
_id: 5ef054487c20460017dcbde9,
coordinates: [Array] },
created: 1592808520819,
category: [],
createdAt: 2020-06-22T06:48:40.821Z,
updatedAt: 2020-06-22T07:29:00.148Z } ]
在那里我有usersLiked 数组,我将上述结果转换为posts 变量并使用以下代码更改isUserLiked。
posts.forEach((post) => {
post.isUserLiked = post.usersLiked.includes(user_id)
});
问题是
post.usersLiked.includes(user_id)总是返回 假的
我的 mongodb 长这样。
我已经尝试过post.isUserLiked = post.usersLiked.includes(mongoose.Types.ObjectId(user_id)),但它给出了相同的输出?这可能是什么问题,我该如何解决?
【问题讨论】:
-
在比较之前将
Object ID转换为字符串。 -
id,user_id和usersLiked的内容是ObjectId类型的对象。.include()使用SameValueZero算法将对象作为对象进行比较。如果它们不相同 (===),则结果将是false。将 id 转换为字符串,然后进行比较。
标签: javascript node.js arrays mongodb mongoose