使用moongoose

时间:2017-07-18 09:58:02

标签: javascript node.js mongoose

我需要帮助从嵌套数组中删除this项。我尝试使用$http.delete,但是这个方法从数据库中删除了整个ObjectID,第二个问题是我无法连接"删除"带有后端代码的按钮。

我的代码:

var product = new Schema({
  title: String,
  price: String,
  description: [ObjectID]
});

的index.html

<form name="editProduct.descriptionForm" ng-submit="editProduct.updateDescription(newDescription, editProduct.descriptionForm.description.$valid)" novalidate>
  <div ng-class="{ 'has-success':(editProduct.descriptionForm.description.$valid && !editProduct.descriptionForm.description.$pristine), 'has-error':(!editProduct.descriptionForm.description.$valid && !editProduct.descriptionForm.description.$pristine) || (!descriptionForm.description.$valid && descriptionForm.$submitted) }">

    <div class="entry input-group" ng-repeat="item in newDescription track by $index">
      <strong><input ng-disabled="editProduct.disabled" class="form-control" type="text" name="description" ng-model="newDescription[$index]" required></strong>
      <span class="input-group-btn">
        <a ng-click="editProduct.deleteDescription(item);" class="btn btn-remove btn-danger">
            <span class="glyphicon glyphicon-remove"></span>
        </a>
      </span>
    </div>
  </div>
  <br>
  <button ng-disabled="editProduct.disabled" class="btn btn-primary" type="submit">Save</button>
</form>

routes.js

router.put('/editProduct', function(req, res){
  var editProduct = req.body._id;
  var options = { multi: true };
  Product.findOneAndUpdate({ _id: editProduct }, { $pull: { description: req.params.description }}, options, function(err, product){
    if(err) throw err;
    if(!product){
      res.json({ success: false, message: 'Product no found' });
    } else {
      product.update(function(err){
        if(err){
          console.log(err);
        } else {
          res.json({ success: true, message: 'Description removed!'})
        }
      });
    };
  });   
});    

我也尝试了以下方法:

Product.findOne({'_id' : product.id}, function(err, me){
  for(var i=0; i<=me.description.length; i++){
    if (String(me.description[i])==String(uid)){
      me.description.remove(uid);
      me.save();                         
    }
  }    
});

我认为,最大的问题是我不知道如何将此功能连接到按钮。

1 个答案:

答案 0 :(得分:1)

请在Mongoose更新查询之前尝试console.log(req.params.description)并检查输出是否确实是有效的ObjectId。

如果控制台输出未显示有效的uid,则问题出在角度代码中。最有可能是editProduct.deleteDescription(item)函数。通过传递正确的描述ID作为参数来检查您是否正在进行Http请求。这可能类似于item.descriptionId或item.id.彻底调试。