2016-09-30 2 views
1

개체 모델별로 사용자 모델을 참조하는 동영상 모델이 있습니다. 사용자가 참석 목록에서 자신을 추가하거나 제거 할 수 있으며 mode.findOneAndUpdate를 사용하여 구현하려고합니다. 나는 기존의 참석하는 사용자가 삭제되지 않도록 $ 세트를 추가해야한다는 것을 알았지 만, 사용자가 자신을 추가 할 때 $ 세트를 사용해도 모든 기존 사용자가 삭제되고 이제는이 사용자 만이 목록에 있습니다.기존 값을 삭제하지 않고 문서 업데이트

영화 모델 여기

{ 
    "_id" : ObjectId("fhdfdca5e1b94fafadhfg1"), 
    "date" : ISODate("2016-10-05T13:56:43.939Z"), 
    "attending" : [ 
     ObjectId("fhdf6d0e4501f294a6dgd2") 
    ], 
    "__v" : 0 
} 

의 내 findandupdate : 여기

코드의

... 
.findOneAndUpdate({_id:req.body.movieId}, {$set:{attending:req.body.imAttending}}, {upsert:true}) 

어떻게 단순히 내 참석 목록에 항목을 추가하는 방법은 무엇입니까?

TL, 당신 만의 고유 값을 addToSet을 목록에 반복 신경 또는 $하지 않는 경우 DR

사용 $ 푸시가 설정되지 $. 아래의 답변 및 의견을 참조하십시오.

답변

3

, 당신은 $push을 사용해야합니다

.findOneAndUpdate({ 
    _id : req.body.dinnerId 
}, { 
    $push : { attending : req.body.imAttending } 
}, ...) 
+0

그레이트! $ set이 작동하지 않는 것 같아서 배열을위한 또 다른 연산자가 있다고 의심해 보았습니다. 모든 연산자가있는 목록은 어디에 있습니까? –

+0

@ S.Schenk은 업데이트 운영자를 위해 [이 목록] (https://docs.mongodb.com/manual/reference/operator/update/#id1)을 참조하십시오. 전역 연산자 목록은 [here] (https://docs.mongodb.com/manual/reference/operator/)에서 시작합니다. – robertklep

+0

나는 추가 된 경우에도 동일한 사용자를 목록에 계속 추가하는 것으로 나타났습니다. 나는 참석 표제 목록에 그 특유의 것을 막으려 고 노력했으나 효과가 없었습니다. 모든 단서? –

0

이전에도 이와 비슷한 문제가있었습니다. 당신이 발견 할 때 하나 업데이트과 같이 설정 연산자를 사용

modelname.findOneAndUpdate({ 
 
    email: var_email}, 
 
    { $set: { 
 
    token: var_token, 
 
    platform: var_platform}}, 
 
    { new: true }, function(err, doc) 
 
{ 
 
    //doc here has updated document, in case you need it. 
 
});

그것은 당신이 게시 한 것과 유사한의 종류를 보인다. 그러나 그것은 몇몇 매개 변수를 취해서 그것들을 현재 객체로 설정해야합니다. 시도하는 내용이 올바르지 않은 경우. 아래에 코멘트. attending가 배열이기 때문에

+0

사람들은 그냥 객체 내부의 변수. 나는 그것을 장치에 사용했다. 그래서 토큰과 플랫폼은 내 mongodb 객체 안에있었습니다. 귀하의 지위에 대해서는 이드, 데이트 또는 참석자가 될 것입니다. –

관련 문제