无法从嵌套数组中删除ID

时间:2019-06-17 11:31:55

标签: node.js mongodb express mongoose mongoose-schema

您好,我正在尝试从文档中删除嵌套数组对象id,但没有将其删除。虽然我收到消息"Deleted"

我有一个结构如下的响应:-

{
    "admins": {
        "users": [
            "5d0364048db4957100f33fea" //<===want to delete this relational id
        ],
        "email": "1cf1eede89@himail.online",
        "password": "$2a$10$vHyGxX9P.t0/ybKcmIzkc.ZCX18oHaVnvTgJIWA2gTNzJ3TCdXS4a",
    "_id": "5d0339d5b4b28b6ddff06802",
    "companyName": "GH",
    "__v": 0
}

我想从阵列中删除users _id

我尝试了此操作,但并没有将其删除。

router.delete('/userDelete/:uId', checkAuth , (req, res, next) =>{
    if(req.userData.role2 === 'admin') {
        Admin.findOneAndUpdate({ _id: req.params.userId },{ $pull: { 'admins.users': req.params.uId}}) 
        .exec()
        .then(result => {
            res.status(200).send(["Deleted"]);
        })
        .catch(err =>{
        if (err.code == 500)
                    res.status(500).send(["Didn't get deleted"]);
        else
            return next(err);
        });

控制器是这样的:-

var admin = new Admin();
    admin.companyName = req.body.companyName;
    admin.admins = {
                    email : req.body.email,
                    password: req.body.password,
                    users : [] 
    };

我被困在这里,我必须在路线上做哪些更改?

编辑:-数据库就是这样 DB

3 个答案:

答案 0 :(得分:1)

问题出在这里Admin.findOneAndUpdate({ _id: req.params.userId }

req.params.userId未定义 ,因为它在您的路径中不存在。 req.params对象仅拥有一个属性uId。  因此您的查询找不到任何数据。
如果您的方法路线具有类似req.params.userId的形式,那么router.delete('/userDelete/:userId/:uId)将很有价值。
因此,您可以在删除请求的网址中添加userId并通过req.params对象进行访问。新网址应如下所示:

/userDelete/userId/uId

(例如)

userDelete/5d0339d5b4b28b6ddff06802/5d0364048db4957100f33fea

答案 1 :(得分:0)

尝试在此处硬编码您的ID

Admin.findOneAndUpdate({ _id: req.params.userId },{ $pull: { 'admins.users': "5d0364048db4957100f33fea"}}) 

如果它可以正常工作

req.params.uId.toString()

答案 2 :(得分:0)

尝试在数组本身的模式本身中将'_id'标记为false。例如,在您的架构中,将“ _id”标记为false,如下所示:

protected void btnappend_Click(object sender, EventArgs e)
{
    System.Text.StringBuilder sb = new StringBuilder();
    sb.Append(lblcode.Text);
    sb.Replace("++ADD_MORE++", $"<div>{txtappend.Text}</div>");
    sb.Append("++ADD_MORE++");

    lblcode.Text = sb.ToString();
}