我有一段时间怀疑这个问题:
当使用mongoose时,如果我将(在查询时)猫鼬对象与_id字段进行比较,那么ODM是否是"智能"足以意识到我的意思是与_id字段进行比较。
替代方案很简单。只需映射对象或数组并获取_ids然后进行比较。这就是我到目前为止所做的。但是,我已经进行了一些测试来证明这一点。 Mi的结果相当不错:是的,它确实......到目前为止。
但是我不想蒙上眼睛。我在mongoose docs中找到了这个: http://mongoosejs.com/docs/api.html#document_Document-equals 但根据我的理解,比较的实际行为是不确定的。
此外,这会如何影响(例如)$ in运算符。 我不知道我的怀疑是否清楚。只是为了它,我发布了一个代码示例。
//Say we have this 2 schemas
var roleSchema = new mongoose.Schema({
name: {type:String, unique:true},
tier: Number
}};
var userSchema = new mongoose.Schema({
firstName: {type:String, unique:true},
lastName: {type:String, unique:true},
role: {type: mongoose.Schema.Types.ObjectId, ref: 'Roles', default:null}
}};
//Now we have a set of fully populated roles
var _roles = ... //fully populated roles
//So if i want to query users..can i safely do something like this?
Users.find({role:{$in:_roles});
//Or should always map?
Users.find({role:{$in:_roles.map(r => r._id)});