猫鼬删除文档中的数组元素
Posted
技术标签:
【中文标题】猫鼬删除文档中的数组元素【英文标题】:Mongoose delete array element in document 【发布时间】:2020-06-10 09:35:54 【问题描述】:您好,我被困在这一点上,我有一个团队模型,如下所示。
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)
);
);
我在 *** 上检查了其他相同的问题,但我无法解决我的问题。
实现这一目标的正确要求是什么?
【问题讨论】:
您是否尝试将id_to_delete
转换为ObjectId
?
不,我该怎么做?
mongoose.Types.ObjectId(id_to_delete)
我检查过但没有变化。回复是一样的
@HammadAli : 不确定n:1
怎么样,但你可以试试这个Team.update( _id: mongoose.Types.ObjectId(_id) , "$pull": "leads": mongoose.Types.ObjectId(id_to_delete)
,你不必使用安全选项,因为它默认为true。
【参考方案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
【讨论】:
以上是关于猫鼬删除文档中的数组元素的主要内容,如果未能解决你的问题,请参考以下文章