使用Moongoose和MEAN Stack更新MongoDB中的数据

时间:2017-04-05 07:01:49

标签: angularjs node.js mongoose

我有像这样的猫鼬数据:

{
    "_id" : ObjectId("58e394cacaa6512ed00e8d83"),
    "RoleName" : "Manager",
    "UIList" : [ 
        {
            "Edit" : false,
            "View" : false,
            "UiName" : "ElevatorMapping"
        }, 
        {
            "Edit" : false,
            "View" : false,
            "UiName" : "ElevatorAssumptions"
        }, 
        {
            "Edit" : false,
            "View" : false,
            "UiName" : "ManageUnits"
        }, 
        {
            "Edit" : false,
            "View" : false,
            "UiName" : "ManageBuildings"
        }
    ],
    "__v" : 0,
    "Description" : "fd",
    "IsActive" : true
}

现在我想在UIname中更新UILIST:“ElevatorMapping”&“Elevator Assumptions”查看和编辑为True。如何为此编写查询?我尝试了类似下面的内容。

这是我的控制器页面。

 $http.put('/ViewEditupdate/' + id +'/' + uiname + '/' + view + '/' + edit).then(function (response) {

                    refresh();
                })

此处正确获取了id值,但未采用编辑视图UI名称。编辑,视图名称被视为未定义。

我的server.js代码

app.put('/ViewEditupdate/:id/:uiname/:view/:edit', RoleEntrypath.RoleViewEditupdate);

我的架构代码

    newRole.update({ "UIList.UiName": "ManageRole" }, { "$push": { "UIList.$.View": "true", "UIList.$.Edit": "true" } },
   function (err, doc) {

        res.json(doc);
    }
    );

任何人都可以提供解决方案吗?

2 个答案:

答案 0 :(得分:1)

您应使用$set代替$pushview的值从false更改为true

试试这个:

newRole.update({ 
    "UIList.UiName": "ManageRole" 
},{ 
    $set: { "UIList.$.View": "true", "UIList.$.Edit": "true" } 
},function (err, doc) {
    res.json(doc);
});

答案 1 :(得分:0)

我已经使用此查询进行了更新。

 newRole.update
        (
        {
        _id: id,
        "UIList.UiName": "ManageRole"
    },
                {
                    $set: {
                        "UIList.$.View": "true",
                        "UIList.$.Edit": "true"
                    }
                },
   function (err, doc) {

        res.json(doc);
    }
    );