如何根据另一个对象ID数组筛选具有MongoDB对象ID的对象数组



我有一组从MongoDB中提取的电影,名为movieList:

[
{
movie: {
_id: 5fde62aa0cec1598fda103ac,
title: 'Wander'
},
status: 2
},
{
movie: {
_id: 5fde62930cec1598fd9d426c,
title: 'Mulan'
},
status: 1
},
{
movie: {
_id: 5fde62a10cec1598fd9f9222,
title: 'Greenland'
},
status: 0
}
]

我有一个电影对象ID数组(不是字符串(,名为removeMovies:

[
5fde62a20cec1598fd9fa275,
5fde62a30cec1598fd9fec86,
5fde62a50cec1598fda034cf,
5fde62a50cec1598fda03f24,
5fde62930cec1598fd9d426c
]

我通常过滤的方式(如果这些是字符串或数字,而不是对象ID(返回一个空数组:

const filteredMovieList = movieList.filter((movie) => {
return removeMovies.includes(movie.movie._id)
})

有什么想法吗?

我认为您可以使用toString并首先将removeMovies对象映射到这些字符串:

const filteredMovieList = movieList.filter((movie) => {
return removeMovies
.map(movieId => movieId.toString())
.includes(movie.movie._id.toString())
})

作为https://docs.mongodb.com/manual/reference/method/ObjectId/,我认为您也可以使用str属性。

const filteredMovieList = movieList.filter((movie) => {
return removeMovies
.map(movieId => movieId.str)
.includes(movie.movie._id.str)
})

解决方案之一是将both objectId强制转换为字符串,例如

const filteredMovieList = movieList.filter((movie) => {
return removeMovies.filter(rmMovie =>  String(rmMovie) == String(movie._id)).length 
== 0 ? false : true  
})

最新更新