2016-12-12 4 views

답변

1

나는 몽구스 전문가가 아니에요. 하지만 참조 할 수있는 숫자가 answer 인 것으로 보입니다.
간단히 대답하면 예를 들어 인덱스를 지정하여 배열 요소를 업데이트 할 수 있습니다. 쉘에서는은 다음과 같습니다 0은 업데이트 할 요소의 인덱스가

db.collection.update({...}, {$inc: {"answer.0.votes": 1}}) 

. 몽구스로 이것을 쓰는 법을 찾을 수있을 것입니다.

제 생각에는 인덱스로 배열을 업데이트하는 것은 좋은 생각이 아닙니다. 요소가 제거/삽입되면 어떻게 될까요? 포함 된 배열 요소는 RDBMS의 일대 다 관계와 같습니다. 더 쉽게 찾을 수있는 ObjectId과 같은 고유 식별자가 있어야합니다. 제안 된 데이터 구조 : id에 의해

{ 
    title: "This is a question", 
    answer: [{ 
     id: ObjectId("584e6c496c9b4252733ea6fb"), 
     content: "Answer", 
     votes: 0 
    }] 
} 

그리고 쿼리가 당신이 투표를 정확한 답을 찾을 수 : $ 배열에 일치하는 요소를 의미

db.collection.update({"answer": {$elemMatch: {id: ObjectId("584e6c496c9b4252733ea6fb")}}}, {$inc: {"answer.$.votes": 1}}); 

.

+0

나는 변수를 전달할 수 있도록 귀하의 대답을 약간 편집했습니다 : var incObject = {}; incObject [ 'options.'+ myIndex + '. votes'] = 1; db.collection.update ({...}, {$ inc : incObject}) –

1

이 시도 :

Model.findOne({ title: 'your-title' }, function (err, doc){ 
    doc.answer.0.votes.$inc(); // increases votes on first answer by 1 
    doc.save(); 
}); 
+0

매개 변수로 '0'을 전달할 수 있습니까? doc.answer.myIndex.votes. $ inc() –

+0

예, 시도해 볼 수 있습니다. –