Получение ошибки: идентификатор списка должен быть объектом после добавления схемы в пример todos в Meteor

Пример todos для Meteor работает нормально. Однако, когда я добавляю схему в коллекции Todos и Lists, я продолжаю получать сообщение «Ошибка: идентификатор списка должен быть объектом». Любая помощь будет принята с благодарностью.

Добавлены: метеор добавить aldeed:simple-schema метеор добавить aldeed:collection2

Вот новая схема, добавленная в файл collections.js:

Lists = new Mongo.Collection('lists');

var Schema = {};

Schema.Lists = new SimpleSchema({
  name: {
    type: String
  },
  incompleteCount: {
    type: Number
  }
});

Lists.attachSchema(Schema.Lists);

Todos = new Mongo.Collection('todos');

Schema.Todos = new SimpleSchema({
  listId: {
    type: Object
  },
  text: {
    type: String
  },
  createdAt: {
    type: Date
  }
});

Todos.attachSchema(Schema.Todos);

Больше ничего не изменилось.

Прежде чем запустить метеор, я сделал "метеорный сброс".

Вот ошибка из файла bootstrap.js при попытке присоединить _id (list_id) нового списка к объекту listId из схемы Todos: . . . {название: "Любимые ученые", предметы: ["Ада Лавлейс", "Грейс Хоппер", "Мария Кюри", "Карл Фридрих Гаусс", "Никола Тесла", "Клод Шеннон" ] } ];

     var timestamp = (new Date()).getTime();
     _.each(data, function(list) {
       var list_id = Lists.insert({name: list.name,
         incompleteCount: list.items.length});

       _.each(list.items, function(text) {     //line 43
         Todos.insert({listId: list_id,        //line 44
                       text: text,
                       createdAt: new Date(timestamp)});
         timestamp += 1; // ensure unique timestamp.
       });
     });

(STDERR)                        throw(ex);
(STDERR)                              ^
(STDERR) Error: List id must be an object
(STDERR)     at getErrorObject (meteor://💻app/packages/aldeed_collection2-core/lib/collection2.js:345:1)
(STDERR)     at [object Object].doValidate (meteor://💻app/packages/aldeed_collection2-core/lib/collection2.js:328:1)
(STDERR)     at [object Object].Mongo.Collection.(anonymous function) [as insert] (meteor://💻app/packages/aldeed_collection2-core/lib/collection2.js:83:1)
(STDERR)     at meteor://💻app/server/bootstrap.js:44:1
(STDERR)     at Array.forEach (native)
(STDERR)     at Function._.each._.forEach (meteor://💻app/packages/underscore/underscore.js:105:1)
(STDERR)     at meteor://💻app/server/bootstrap.js:43:1
(STDERR)     at Array.forEach (native)
(STDERR)     at Function._.each._.forEach (meteor://💻app/packages/underscore/underscore.js:105:1)
(STDERR)     at meteor://💻app/server/bootstrap.js:39:1

=> Сервер Meteor перезапущен => Приложение запущено.


person Mark M    schedule 09.02.2016    source источник


Ответы (1)


Lists.insert() возвращает _id вновь созданного объекта, который является строкой, поэтому ваша переменная list_id возвращает строку и делает недействительной вашу схему. Измените тип списка Schema.Todos на String вместо Object.

Todos = new Mongo.Collection('todos');

Schema.Todos = new SimpleSchema({
  listId: {
    type: String
  },
  text: {
    type: String
  },
  createdAt: {
    type: Date
  }
});
person Stephen Woods    schedule 09.02.2016
comment
Спасибо, Степан, так оно и было! Я ценю помощь и ваш быстрый ответ. - person Mark M; 09.02.2016