【发布时间】:2019-01-13 23:49:53
【问题描述】:
我已经搜索了互联网的每个角落,试图解决这个问题,但到目前为止还无法解决。我正在尝试执行 mongodb $pull 函数以从嵌套在模式中的数组中删除对象。当我将 id 硬编码为 'ObjectId("5b68c9eec7171bc263660633")' 时,我成功地删除了 ObjectId。虽然当我将变量传递给它时它根本不起作用。
var ManagerSchema = Schema({
manager: {
isIdentified: {
type: Boolean,
default: false
},
employeeID: [**{ type: Schema.Types.ObjectId, ref: 'Employee' }**]
}
});
var EmployeeSchema = Schema({
...
});
var Employee = mongoose.model('Employee', EmployeeSchema); // Employee
var Manager = mongoose.model('Manager', ManagerSchema); // Manager
在我从数据库中删除员工之前,我正在尝试删除上面的粗体部分:
Employee.pre('remove', function (next) {
var employee = this;
Manager.update({}, {
$pull: {
'manager.employeeID.$': 'ObjectId("5b68c9eec7171bc263660633")' // works
// though trying to make it dynamic
// 'manager.employeeID.$': ('\'ObjectId("' + employee._id + '")\'').toString() // doesnt work
// 'manager.employeeID.$': '\'ObjectId("' + employee._id + '")\'' // doesnt work
// 'manager.employeeID.$': mongoose.Types.ObjectId(`${employee._id}`) // doesnt work
// 'manager.employeeID.$': new mongoose.Types.ObjectId(employee._id) // doesnt work
// 'manager.employeeID.$': mongoose.Types.ObjectId(employee._id) // doesnt work
// 'manager.employeeID.$': new ObjectID(employee._id) // doesnt work
// 'manager.employeeID.$': employee._id // doesnt work
// 'manager.employeeID.$': {"_id": employee._id}// doesnt work
}
}, {
multi: true
}, () => {
next();
}
)
});
根据我在网上找到的所有文章,我尝试了很多其他的东西,虽然不知道为什么会删除纯文本,但变量不会。
非常感谢任何帮助。
【问题讨论】:
-
你能试试
`ObjectId("${employee._id.toHexString()}")`吗? -
这里不需要使用
$位置运算符...试试简单的$pull: { 'manager.employeeID': '5b68c9eec7171bc263660633'} -
'manager.employeeID': mongoose.Types.ObjectId(employee._id)? -
天啊传奇!!! @Akrion 和 AnthonyWinzlet 的组合回答很有魅力!花了太长时间,做了太多的组合。感谢您的快速回复。感谢大家。这是行之有效的方法。 'manager.employeeID': mongoose.Types.ObjectId(employee._id) 请注意,该行中的 $ 不是类似于数组项吗?
标签: javascript node.js mongodb mongoose