2014-10-15 1 views
1

Mongolab에 저장되어있는 값을 단순히 첫 번째 항목의 중복 값으로 표시하는 모든 문서 하위 배열을 업데이트하려고 시도 할 때 각형 풀 스택과 몽고 풀을 사용하고 있습니다. 배열의 요소. 페이로드를 업데이트하는 올바른 나타나고 예컨대 다른 값을 포함하는 경우Mongo의 첫 번째 항목의 중복 값으로 저장된 문서 하위 배열

몽구스 스키마

techspecs: [{label: String, value: String, _id: false}], 

로 설정 I은 단지 첫 번째 요소의 다수의 중복 저장 유지 이상의 값 쌍이 있다면

techspecs: [{label: "Dimensions", value: "1200x800mm"}, {label:"Capacity", value: "532 l"}] 

는하지만 Mongolabs있는 숫자가

"techspecs": [ 
     { 
      "label": "Dimensions", 
      "value": "1200x800mm" 
     }, 
     { 
      "label": "Dimensions", 
      "value": "1200x800mm" 
     } 
    ], 

로서 저장된다.

업데이트은 (는) 다음 함수

$scope.updateProduct = function(form) { 
    $scope.submitted = true;  
    var pId = $scope.product._id; 
    if(form.$valid) { 
    productAPI.update({id: pId}, { 
      _id: pId, 
      categoryid: $scope.currentcat[0]._id, 
      brand: $scope.product.brand, 
      model: $scope.product.model, 
      heading: $scope.product.heading, 
      description: $scope.product.description, 
      price: $scope.product.price, 
      techspecs: $scope.product.techspecs, 
      lastmodified: Date.now() 
    }).$promise.then(function() {  
     console.log('Product updated');   
    }, function(err) { 
     err = err.data; 
     $scope.errors = {}; 
     angular.forEach(err.errors, function(error, field) { 
     form[field].$setValidity('mongoose', false); 
     $scope.errors[field] = error.message;    
     }); 
    }); 

를 통해 업데이트되고있는 컨트롤러에서 공장 서비스

angular.module('prototypeMeanApp') 
    .factory('productAPI', ['$resource', function($resource) { 
     return $resource('api/products/:id', {id: '@_id'}, { 
     'update': { method:'PUT'}, 
     'create': { method:'POST'}, 
     'query' : {method:'GET', isArray:true} 
     });   
    } 
]); 

을 통해 그리고보기

<div class="form-group" data-ng-repeat="techspec in product.techspecs"> 
    <label class="control-label hidden-xs col-sm-3">Tech SpeC#{{$index+1}}</label> 
    <div class="col-sm-4 col-md-3"> 
     <div class="controls">              
      <input type="text" data-ng-model="techspec.label" class="form-control" placeholder="Label" /> 
     </div> 
    </div> 
    <div class="col-sm-4 col-md-3"> 
     <div class="controls">           
      <input data-ng-model="techspec.value" type="text" class="form-control" placeholder="Value" /> 
     </div>  
    </div> 
</div> 

답변

3

에 $ 리소스를 사용하여 수행됩니다 나는 mean.io와 함께 간단한 테스트를 끝내고 이것이 가능하고 Mean.io가 성공했는지 확인했다. Mongo에 문서 하위 배열을 저장했습니다. 이 후 저는 앵귤러 풀 스택과 mean.io에 대한 소스와 구현 방법을 비교하여 차이점을 확인했습니다.

결국 업데이트 기능에 사용 된 lodash 메소드로 밝혀졌습니다. mean.io는 하위 배열이 올바르게 각도-fullstack을 사용하여 다른 사람을 위해 MongoDB를

에 저장된 _.extend를 사용하는 각-fullstack 코드를 변경 한 후 _.extend을 사용하는 동안

각도-fullstack은 _.merge을 사용했다. 예를 들어 서버 엔드 포인트 컨트롤러를 편집하십시오. server/api/products/product.controller.js

그런 다음 업데이트 할 함수를 찾고 _.merge를 _.extend로 바꿉니다.

exports.update = function(req, res) { 
    if(req.body._id) { delete req.body._id; } 
    Product.findById(req.params.id, function (err, product) { 
    if (err) { return handleError(res, err); } 
    if(!product) { return res.send(404); } 
    var updated = _.extend(product, req.body); 
    updated.save(function (err) { 
     if (err) { return handleError(res, err); } 
     return res.json(200, product); 
    }); 
    }); 
}; 
+0

감사! 이것은 내가 겪고있는 문제였습니다. – user3319803

관련 문제