![](/img/trans.png)
[英]mongoose - delete array element of a document, selecting only one object from array
[英]Mongoose delete array element in document
嗨,我被困在這一點上,我有一個團隊模型,如下所示。
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 上檢查了其他相同的問題,但無法解決我的問題。
實現這一目標的正確要求是什么?
您可以嘗試以下代碼:
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
因為所有貓鼬模式默認為該選項。 參考:貓鼬安全選項
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.