嗨,我被困在这一点上,下面有一个团队模型。
var teamSchema = new mongoose.Schema({
name:{
type : String
},
members :[
{
type: mongoose.Schema.ObjectId,
ref: 'Users'
}
],
leads:[
{
type: mongoose.Schema.ObjectId,
ref: 'Users'
}
],
admin_rights :[
{
type: mongoose.Schema.ObjectId,
ref: 'Users'
}
],
view_rights :[
{
type: mongoose.Schema.ObjectId,
ref: 'Users'
}
]
});
在此模型中,我引用了User Schema
。
我想删除leads
数组中的一个元素。我尝试了很多次,但显示如下。
{
"n": 1,
"nModified": 0,
"opTime": {
"ts": "6797745245908893697",
"t": 4
},
"electionId": "7fffffff0000000000000004",
"ok": 1,
"operationTime": "6797745245908893697",
"$clusterTime": {
"clusterTime": "6797745245908893697",
"signature": {
"hash": "Sdl1QzsqCcO7SKS95+N1Gx7rkJY=",
"keyId": "6762348659485966337"
}
}
}
这是删除数组元素但不起作用的代码。
router.get('/deletelead', (req, res) => {
var _id = req.query.team_id;
var id_to_delete = req.query.id;
Team.update({ _id: _id }, { "$pull": { "leads": { id_to_delete } } }, { safe: true }, function(err, obj) {
if(!err){
res.json(obj)
}
else
res.json(err)
});
});
我检查了关于stackoverflow的其他相同问题,但无法解决我的问题。
达到此目的的正确要求是什么?
答案 0 :(得分:1)
您可以尝试以下代码:
const mongoose = require('mongoose');
router.get('/deletelead', (req, res) => {
var _id = req.query.team_id;
var id_to_delete = req.query.id;
Team.update({ _id: mongoose.Types.ObjectId(_id) }, { "$pull": { "leads": mongoose.Types.ObjectId(id_to_delete) } }, function (err, obj) {
if (!err) {
res.json(obj)
}
else
res.json(err)
});
});
有几处更改:
ObjectId()
类型,则需要将所有值转换为ObjectId()
类型。$pull
中的值也可以直接分配给leads
,但不像对象。safe :true
,因为所有猫鼬模式默认为该选项。 参考: mongoose-safe-option