2015-04-13 3 views
3

Я пытался отладить кусок кода в течение нескольких часов, ударив головой о стену и, наконец, определил свои проблемы в месте в коде, где назначается результаты вызова collection.findOne() для переменной дают мне разные данные, чем то, что я вижу с помощью console.log() того же findOne() в предыдущей строке.meteor minimongo получение непоследовательности collection.findOne() results

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], второй показывает тесты: 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-повторов в три раза и печатает каждую из три объекта в массиве тестов.

Очевидно, это означает, что я могу получить доступ к необходимым мне данным. Вместо

var testArray = stTmp.tests; 

Который оставляет меня с массивом только один элемент, я просто должен получить длину stTmp.tests, а затем использовать цикл для доступа к каждому элементу по индексу и вставить их в переменная testArray.

Так что я могу продолжить, но я до сих пор не понимаю поведение, которое я вижу. Я нахожусь на небольшом сроке, чтобы продолжать продвигаться на этом этапе, но когда у меня есть время, я могу вернуться к этому и попытаться воспроизвести его в метеораде или другой форме, с которой я могу поделиться полным кодом.

+0

Я также попытался вар stTemp = Students.find ({_ id.thisStID}) выборки(); и подумал, что на минуту он вернул правильные данные, но после нескольких вызовов Student.update() он возвращал те же незавершенные/устаревшие данные. – soisystems

+0

Опубликовать MeteorPad или поделиться репо, ваш вопрос слишком расплывчатый, и я вижу опечатки на ваших консольных журналах. –

+0

Вы уверены, что они на самом деле разные, и это не просто пульт браузера ведет себя странно? В chrome, если вы идете 'x = {a: {}}', 'console.log (x)', 'xab = 5' и только затем расширяете вывод' console.log', тогда вы увидите 'b' 5, хотя он не был установлен во время 'console.log'.Попытка изменить ваш код на 'console.log (JSON.stringify (...))' вместо просто 'console.log (...)'. – user3374348

ответ

0

1) Если вы изменяете возвращаемое значение из Minimongo, не ожидайте его сохранения. Minimongo был специально написан таким образом, поэтому вы вынуждены использовать операторы update для обновления значений. .

2) Правильная проекция API является Coll.find({..selector..}, {fields:{..projection..}})

+0

Это не относится к данной проблеме. Я использую команду collection.update для внесения изменений, а console.log (Coll.find()) или findOne() показывают эти изменения. Но присваивая переменной, я получаю разные данные, чем то, что я изменил с помощью обновления. – soisystems

+0

@soisystems Я не могу воспроизвести его на своей машине. Возможно, здесь будет более подходящим приложение, демонстрирующее проблему и открытый билет GitHub. – imslavko

+0

Хорошо, спасибо. Я постараюсь сделать что-то более конкретное, если у меня появится шанс. Я думал, что мне просто не хватает чего-то очевидного в том, как работает minimongo, но это должно быть что-то конкретное для моего кода. – soisystems

Смежные вопросы