Mongoose中如何在ObjectId数组中查找元素的索引

5

I have the following schema:

var daySchema = new Schema({
date: {
    type: Date,
    required: true
},
activities: [{
    type: Schema.Types.ObjectId,
    ref: 'Activity'
}]
});

我正在从日程中删除一个活动:

var index = day.activities.indexOf("584aa9c16791eb1ec4ad8e73");
day.activities.splice(index, 1);

有人能解释一下为什么这个代码可以工作吗?数组 "activities" 是一个 "ObjectId" 数组。因此,"indexOf" 方法不应该适用于对象,但是它仍然可以根据 id 找到元素。这让我很困惑,难道还有其他的操作,比如 ObjectId 内部使用了 map 函数吗?

1个回答

9
这样可以实现的原因是Mongoose将数组包装在MongooseArray中,它提供了自己的indexOf方法,该方法支持基于字符串的比较,而不是本地数组实现使用的严格相等性测试。

我之前不知道"MongooseArray",非常感谢您提供的信息,这似乎就是问题所在! - FraK
1
那个 indexOf 链接似乎不再重定向到 indexOf 文档,因此很难知道 indexOf 具有特殊的语义。 - solstice333

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接