为什么这个includes()返回false?

时间:2020-06-22 07:45:31

标签: javascript node.js arrays mongodb mongoose

我正在使用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看起来像这样。

enter image description here

我已经尝试过post.isUserLiked = post.usersLiked.includes(mongoose.Types.ObjectId(user_id)),但是它给出了相同的输出?这可能是什么问题,我该如何解决?

2 个答案:

答案 0 :(得分:2)

post.isUserLiked = post.usersLiked.some(id => id.toString() === user_id)

如果user_id不是字符串,请使用.equals。在这里https://stackoverflow.com/a/11638104/8443899

答案 1 :(得分:-1)

我认为问题是由您向我们展示的数据集引起的,usersLiked: [ 5eef7fc55de48230887f3aa3 ],的数组不是字符串。

如果此ID是一个字符串,则可以执行usersLiked.includes('ANOTHER STRING HERE')

我的意思是字符串,我的意思应该是这样的:usersLiked: [ '5eef7fc55de48230887f3aa3' ]