예를 들어 몽구스로 배열의 두 번째 항목을 업데이트하는 방법이 있습니까?몽구스 위치/인덱스별로 배열 항목 업데이트
스키마 : 더 1 표를 가지고, 그래서 내 경우
title: String,
answer: [{
content: String,
votes: Number
}]
내가, 첫 번째 또는 두 번째 대답을 업데이트 할.
예를 들어 몽구스로 배열의 두 번째 항목을 업데이트하는 방법이 있습니까?몽구스 위치/인덱스별로 배열 항목 업데이트
스키마 : 더 1 표를 가지고, 그래서 내 경우
title: String,
answer: [{
content: String,
votes: Number
}]
내가, 첫 번째 또는 두 번째 대답을 업데이트 할.
나는 몽구스 전문가가 아니에요. 하지만 참조 할 수있는 숫자가 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}});
.
이 시도 :
Model.findOne({ title: 'your-title' }, function (err, doc){
doc.answer.0.votes.$inc(); // increases votes on first answer by 1
doc.save();
});
매개 변수로 '0'을 전달할 수 있습니까? doc.answer.myIndex.votes. $ inc() –
예, 시도해 볼 수 있습니다. –
나는 변수를 전달할 수 있도록 귀하의 대답을 약간 편집했습니다 : var incObject = {}; incObject [ 'options.'+ myIndex + '. votes'] = 1; db.collection.update ({...}, {$ inc : incObject}) –