2014-04-29 1 views
0
내가 찾아 수정하고 그 후 MongoDB를에서 개체를 저장할

를 사용하여 MongoDB에서 수정 된 객체를 저장합니다. 그것은 그 다음과 같습니다어떻게 Node.js를 드라이버

var message = req.body; 
db.collection('user', function(err, collection) { 
    collection.findOne({'facebook_id':req.params.facebook_id}, function(err, item) { 
    if(item) { 
     item.messages.push({'value': message.value, 'date': message.date}); 
     //save Object 
    } 
    }); 
}); 

어떻게 지금은 데이터베이스에 변경 사항을 저장 할 수 있습니까?

아니면 내가 대신) (.update를 사용해야합니까? 여기서 문제는 객체 전체를 바꾸고 싶지 않지만 객체의 배열에 무언가를 삽입하는 것입니다.

감사 &보다도, 마크

답변

1
collection.update({'facebook_id':req.params.facebook_id}, 
    {$push: { messages: {'value': message.value, 'date': message.date} } }, function(err) { 

}); 

를 사용하여 $ 푸시 운영자는 데이터베이스에 직접 배열에 값을 추가 할 수 있습니다. http://docs.mongodb.org/manual/reference/operator/update/push/

특히 큰 개체의 경우 전체 개체를 업데이트하는 것보다 훨씬 효율적이라는 것에 유의하십시오.

+0

감사합니다! 그것은 효율적이라고 들린다. 수정 된 배열 자체가 다른 배열에 있으면 어떻게 할 지 말해 줄 수 있습니까? 'user.circles [j] .messages.push (message)'라고합시다. (나는 이미 j를 안다). – Luxori

1
db.collection.update ({'facebook_id':req.params.facebook_id}, item, function (err) { 
    if (err) return next (err); 
}); 
+0

답장을 보내 주셔서 감사합니다. 그래서 .findeOne() 콜백에서 .update를 호출합니다. 'if (err) return next (err);'에 대해 몇 마디로 설명해 주시겠습니까? – Luxori

+0

자주 "다음"이라고하는 Express 응용 프로그램의 모든 미들웨어에 콜백이 전달됩니다. 이 질문과 관련이 없습니다. 오류로 원하는 모든 작업을 수행 할 수 있습니다. – JuJoDi