位置$演算子を使って配列のオブジェクトフィールドの値を更新しようとしましたが、Mongoドキュメント(docs.mongodb.com/manual/reference/operator/update/positional/)の例を使用しましたが、例は流星では機能しませんでした。流星の中のmongoの私の誤りかいくつかの制限ですか?コードは次のとおりです。Mongoコレクションのオブジェクト配列の更新はmeteor.jsでは機能しませんか?
if (Meteor.isServer) {
console.info("Create collection");
students = new Mongo.Collection('students');
console.info("Clear collection from old data");
students.remove();
//***************************************************
console.info("Insert data to collection");
if (students.find().count() === 0) {
students.insert({
_id: 4,
grades: [
{ grade: 80, mean: 75, std: 8 },
{ grade: 85, mean: 90, std: 5 },
{ grade: 90, mean: 85, std: 3 }
]
});
}
//***************************************************
console.info("Update data in collection");
// Example from https://docs.mongodb.com/manual/reference/operator/update/positional/
// Use the positional $ operator to update the value of the std field in the embedded document with the grade of 85:
students.update(
{ _id: 4, "grades.grade": 85 },
{ $set: { "grades.$.std" : 6 } }
);
console.info("Update data in array with id 4 in collection - OK");
//***************************************************
console.info("See updated data");
console.info("New data in the field std must be 6 but = " + students.findOne({_id: "4"}).grades[1].std);}
結果は、エラーメッセージなしで同じ古い値 "5"です。 Mongo docの例がうまくいかない理由は何でしょうか?
位置$演算子はMeteorで動作しますが、まだコードが機能していない理由はわかりません... – Sean
引用符を置くとすべてが動作し始めます: –
引用符を置くとすべて作業を開始します: 'students.update( {_id:" 4 "、" grades.grade ":" 85 "}、 {$ set:{"成績$ std ":" 6 "}}'流星やJSの特集:-)?私はそれが他の誰かに役立つことを願っています:-) –