私は今、数時間コードのチャンクをデバッグしようとしていて、頭を壁にぶつけて、最終的に、collection.findOne() 呼び出しの結果を変数に代入するコード内の場所に問題を突き止めました。前の行の同じ findOne() の console.log() で表示されるものとは異なるデータを提供します。
prePostState = function(thisStID) {
console.log(Students.findOne({_id:thisStID}));
var stTemp = Students.findOne({_id:thisStID});
console.log(stTmp);
var testsTemp = stTmp.tests;
コレクション オブジェクトには「tests」配列があります。この例では、配列には要素として 3 つのオブジェクトが含まれています。
両方の console.log() 行がこのようなものを返しますが
Object {_id: "eXf9dqQbaemKS24Ti", name: "Student,Name", group: "none", site: "SiteName", tests: Array[3]}
それぞれを展開すると、異なるデータが表示されます。最初のものは正しいテストを示しています: Array[3]、2 つ目はテストを示しています: Array[1]、そしてその配列内の単一の要素には、完全な配列内の一致する要素とは異なるデータもあります。
----更新----
さらにテストを行って、コードを少し変更しました。
prePostState = function(thisStID) {
console.log(Students.find({_id:thisStID}).fetch()); //1
var stTmp = Students.find({_id:thisStID}).fetch();
console.log(stTmp); //2
console.log(stTmp[0].tests.length); //3
for(var i = 0; i < stTmp[0].tests.length; i++) {
console.log(stTmp[0].tests[i]); //4
}
1 返品:
[Object]
0: Object
_id: "AqLHB8hT8GxzQ7zyD"
group: "none"
name: "Student,Name"
site: "SiteName"
tests: Array[3]
2 返品:
[Object]
0: Object
_id: "AqLHB8hT8GxzQ7zyD"
group: "none"
name: "Student,Name"
site: "SiteName"
tests: Array[1]
3 返品:
3
4 の for ループは 3 回繰り返され、tests 配列内の 3 つのオブジェクトのそれぞれが出力されます。
明らかに、これは必要なデータにアクセスできることを意味します。それ以外の
var testArray = stTmp.tests;
これにより、要素が 1 つだけの配列が残ります。stTmp.tests の長さを取得し、for ループを使用して各要素にインデックスでアクセスし、それらを testArray 変数に挿入するだけです。
だから私は続けることができますが、私はまだ私が見ている行動を理解していません. この時点で少しずつ進捗を進めていきたいと思っていますが、時間ができたら、これを再検討して、完全なコードを共有できる meteorpad やその他の形式で複製してみるかもしれません。