put 사용법 ( MongoDB findAndModify의 사용과 함께)

사용 예제.

Angular JS

$scope.editCart = function(cart){
   $http.put('/editCart/' + cart._id , cart).success(function(response){
      ...
    });
};

1. Client Side인 Angular JS 쪽에서 $http.put 을 작성한다.

***
$http.put 에 들어갈 라우트는 보통 기본 route 뒤에 해당 item의 _id 값을 붙여준다
( '/editCart/' + cart._id )

** 추후에 저 _id 값은 Node.js 쪽에서 req.params 를 통해서 가져올 수 있다.

그 후에 cart를 전달한다.

** 추후에 이 cart는 req.body를 통해서 가져올 수 있다.
('/editCart/' + cart._id , cart)

Node.JS(Express)

app.put('/editCart/:id',function(req,res){

var id = req.params.id;
var query = {_id:ObjectId(id)};
var sort = [];
var operator = {$set : {product:req.body.product , price : req.body.price } };
var options = { 'new' : true };

db.collection('cart').findAndModify(query,sort,operator,options,function(err,doc){
if(err) throw err;
res.json(doc);
});
});

2. Server Side인 Node.js 쪽에서 app.put('/editCart/:id' ... 를 설정해준다.

:id의 의미는 /editCart/ 의 뒤에 따라붙은 놈을 id라는 변수로 받는다는 의미이다.

저 변수는 req.params.id 에 저장되어 있다.

보통은 저 변수를 var id = req.params.id; 형태로 따로 저장해서 사용한다.

3.위에서 회색처리된 코드들은 MongoDB의 findAndModify와 관련되어 있는 코드들이다.

put의 처리와 관련된 MongoDB의 메소드는 findAndModify 이다.

findAndModify의 사용법은 다음과 같다.

db.collcetion('cart').findAndModify(query,sort,operator,options,callback);

(1) query
query 에는 말 그대로 query할 document를 집어넣는다.
{_id:ObjectId(id)}
(2) sort
추후에 설명(배열의 형태라는 것만 알고 있자.)
(3)operator
operator에 관해서 작성한다.
위의 예제에서는 $set operator을 사용했다.
{ $set : {product:req.body,product , price : req.body.price } };

$set operator?
db.people.update({name:"Alice"},{$set:{age:30}}); 
$set은 First arguments에서 찾아진 document를 토대로 
$set에 설정된 field만 수정한다.
 만약, 그 field가 없다면, 새로운 field를 만들어서 그 document에 추가한다.

(4) options
findAndModify의 option에 관해서 설정한다.
위의 예제에서는 'new' option을 설정했다.
{ 'new' : true };

$new option? 
new option은 기본적으로 false로 설정되어있는데, true로 설정되면 original이 아닌 수정된 document를 return 한다.

(5) callback
function(err,doc){
if(err) throw err;
res.json(doc);
}