2016-12-12 7 views

答えて

1

私はマングースの専門家ではありません。しかし、あなたが参照することができるanswerがあるようです。
短い答えは「はい」です。インデックスを指定して配列要素を更新できます。シェルでは、次のようになります。0は更新したい要素のインデックスである

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

。私はあなたが文法をどのようにマングースで書くのかを見つけることができると確信しています。

私の意見では、インデックスで配列を更新するのは良い考えではありません。要素が削除/挿入された場合はどうなりますか?あなたの埋め込み配列要素は、RDBMSの1対多の関係に似ています。彼らはより簡単に見つけるために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 ['オプション。' + 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

はい、それを試すことができます。 –

関連する問題