【问题标题】:Trying to remove a nested object in mongoose试图删除猫鼬中的嵌套对象
【发布时间】:2015-09-15 06:56:39
【问题描述】:

我正在尝试删除嵌套对象,但由于某种原因,我做错了什么,因为我似乎无法访问嵌套对象。我可以删除未嵌套的对象。

这是我的代码

json:

{
   "_id": ObjectId("55904d2da35bf71c06184f60"),
   "title": "h1",
   "url": "h1",
   "menuIndex": NumberInt(0),
   "date": ISODate("2015-06-28T21:12:38.256Z"),
   "contents": [
     {
       "order": NumberInt(0),
       "data": "something",
       "_id": ObjectId("55904d38a35bf71c06184f62") 
    },
     {
       "order": NumberInt(1),
       "data": "not something",
       "_id": ObjectId("55904d49a35bf71c06184f63") 
    }
  ],
   "__v": NumberInt(0) 
}

API:

router.post('/content/delete/:id/:contentId', sessionCheck, function(req,res) {
    var id = req.body._id;
    var contentId = req.body._id;
    Page.update({
        _id: id
    }, {
        $pull: {'contents': {
            _id: contentId            
        }}},
        function(err){
            if(err)
                return res.send(err);
        }
    );
});

工厂:

.factory('pagesFactory', ['$http', 
  function($http) {

    return {   
       deleteContent: function(id,contentId) {          
          return $http.post('/api/content/delete/'+ id + '/' + contentId);
       }

    };
  }
])

控制器:

$scope.deleteContent = function(id,contentId) {
    pagesFactory.deleteContent(id,contentId);
};

HTML:

<div ng-repeat="data in pageContent.contents track by data.order">
    <button class="btn btn-success" ng-click="deleteContent(pageContent._id,data._id)">Delete</button>
    <div ng-bind-html="trustAsHtml((data.data))">
    </div>
</div>

【问题讨论】:

  • 删除嵌套对象的函数在哪里?
  • 如果我理解正确的话,你是不是要删除内容的键值?
  • 是的,完全正确。但不仅仅是与 contentId 匹配的那些。并且该功能在我的工厂中。
  • 应该是req.params.id和req.params.contentId
  • 我会尝试一下,但我可以使用 req.body._id 获得两个 ID。

标签: angularjs node.js mongoose


【解决方案1】:

idcontentId 都作为 url 参数而不是 POST 正文发送。所以正确的代码是:

var id = req.params.id; // not req.body._id
var contentId = req.params.contentId; // not req.body._id
Page.update({
    _id: id
}, {
    $pull: {'contents': {
        _id: contentId            
    }}},
    function(err){
        if(err)
            return res.send(err);
    }
);

【讨论】:

    猜你喜欢
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 2014-02-10
    • 2014-07-13
    相关资源
    最近更新 更多