簡體   English   中英

Mongoose 刪除文檔中的數組元素

[英]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)
    });
});

有幾個變化:

  1. 如果這些字段是數據庫中的ObjectId()類型,則需要將所有值轉換為ObjectId()類型。
  2. 同樣在$pull值可以直接分配給leads但不像一個對象。
  3. 您不需要指定safe :true因為所有貓鼬模式默認為該選項。 參考:貓鼬安全選項

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM