我有以下架构:
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);
有人可以解释一下为什么会这样吗?阵列"活动"是" ObjectId"的数组。所以" indexOf"不应该使用对象,但仍然是" indexOf"能够根据id找到元素。这让我发疯了,这里还有其他事情,也许是ObjectId里面的地图函数?
答案 0 :(得分:3)
这是有效的,因为Mongoose在MongooseArray
中包装了一个数组,该数组提供了自己的indexOf
方法,该方法支持这种基于字符串的比较,而不是本机数组实现使用的严格相等性测试。