如何检查数组是否包含ObjectId?



运行以下代码:

console.log(typeof req.user.models,typeof req.user.models[0],req.user.models[0] instanceof String,req.user.models[0] instanceof ObjectId,req.user.models)
console.log(typeof req.params.id,req.params.id)
console.log("includes:", req.user.models.includes(req.params.id), req.user.models.includes(ObjectId(req.params.id)))
for(let i=0;i<req.user.models.length;i++) {
if (req.user.models[i]==req.params.id) {
console.log("u approx")
if(req.user.models[i]===req.params.id) {
console.log("u exact")
}
}
if (req.user.models[i]==ObjectId(req.params.id)) {
console.log("s approx")
if(req.user.models[i]===ObjectId(req.params.id)) {
console.log("s exact")
}
}
}

打印以下内容:

object object false true [ 60066eac8a2f2c21f48688f2 ]
string 60066eac8a2f2c21f48688f2
includes: false false
u approx

考虑到req.user.models[0] instanceof ObjectId返回true,我不明白req.user.models.includes(ObjectId(req.params.id))为什么可以返回false,s approxs exact为什么不能打印。

同样值得注意的是,我在使用ObjectId(或ObjectID)时遇到了一些问题,我的解决方案是:

const mongo = require("mongodb");
const ObjectId = mongo.ObjectID;

这可能是错误的,是什么导致的问题?

有三种方法可以解决这个问题。

1. req.user.models[i].toString()
2. JSON.stringify(req.user.models[i])
3. req.params.id.equals(req.user.models[i])

if (JSON.stringify(req.params.id) === JSON.stringify(req.user.models[i])) {
console.log('This is true');
}
if (req.params.id.equals(req.user.models[i])) {
...
}

你可以用这段代码在objecd

数组中搜索字符串id
const exists = req.user.models.some(val => val.toString() === req.params.id) 

const exists = req.user.models.some(val => val.equals(req.params.id))

最新更新