我有以下架构:
var daySchema = new Schema({
date: {
type: Date,
required: true
},
activities: [{
type: Schema.Types.ObjectId,
ref: 'Activity'
}]
});
我正在删除 daySchema 中的一项事件:
var index = day.activities.indexOf("584aa9c16791eb1ec4ad8e73");
day.activities.splice(index, 1);
有人可以解释一下为什么这有效吗?数组“activities”是“ObjectId”数组。所以“indexOf”不应该与对象一起工作,但“indexOf”仍然能够根据id找到元素。这让我发疯,这里还发生了其他事情,也许是 ObjectId 内的 map 函数?
最佳答案
这是有效的,因为 Mongoose 将一个数组包装在 MongooseArray
中,它提供了自己的 indexOf
方法支持这种基于字符串的比较,而不是 native 数组实现使用的严格相等测试。
关于arrays - ObjectId 数组中的 Mongoose indexOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41063587/