Метеор: у меня проблемы с поиском коллекции и возвратом результатов. Исключение при вызове метода. не определено

У меня есть коллекция со списком элементов, называемых «категориями», каждая категория имеет поле _id и имя. Я пытаюсь просто вернуть поиск по названию категории

вот структура документа. Каждый элемент списка имеет эти свойства. Я пытаюсь настроить таргетинг на поле «имя», но получаю сообщение об ошибке

введите здесь описание изображения

I20160704-22:47:42.976(1)? Исключение при вызове метода findCategory ReferenceError: идентификатор не определен

клиент/html

 <form class="form-inline">
  <input type="text" class="form-control" id="searchCategory" placeholder="Search for Category">
  <button type="submit" class="btn btn-info">Search</button>
</form>



 {{#if foundCategory}}
      <div class="foundCategory">
        <button type="button" class="btn btn-default" id="follow">Follow @{{foundCategory.name}}</button>
      </div>
    {{/if}}
    </template>

сервер/js

Meteor.methods({
  'findCategory': function(name) {
    return Meteor.CategoryCollection.findOne({
      _id: id          
}, {
      fields: { 'name': 1 }
    });
  }
});

Я старался

Meteor.methods({
      'findCategory': function(name) {
        return CategoryCollection.findOne({
          name : name         
    }, {
          fields: { 'name': 1 }
        });
      }
    });

но я получаю ошибку.

Исключение при вызове метода «findCategory» TypeError: невозможно вызвать метод «findOne» неопределенного

Как я могу вернуть нужный мне документ?

ИЗМЕНИТЬ

Я использую rest2ddp для вызова данных json и вставки их в CategoryCollection.

я также изменил Meteor.CategoryCollection на просто CategoryCollection

сервер/main.js

REST2DDP.publish("CategoryPublication", {
  collectionName: "CategoryCollection",
  restUrl: "http://localhost:8888/wordpress/wp-json/wp/v2/categories",
  jsonPath: "$.*",
  pollInterval: 5000,
});

клиент.подписки.js

CategoryCollection = new Mongo.Collection("CategoryCollection");
Meteor.subscribe("CategoryPublication");
Tracker.autorun(function () {
  console.log(CategoryCollection.find().fetch());
});

person Shingai Munyuki    schedule 04.07.2016    source источник
comment
где и как вы определяете CategoryCollection? Meteor.CategoryCollection почти наверняка неверен (потому что вам действительно не следует расширять объект Meteor своими собственными переменными.   -  person Christian Fritz    schedule 05.07.2016
comment
Спасибо за ответ @ChristianFritz, Meteor.CategoryCollection была опечаткой с моей стороны. с точки зрения того, где я определил CategoryCollection, я отредактировал сообщение, чтобы показать это. Интересно, это то, о чем вы спрашиваете? Пожалуйста, взгляните.   -  person Shingai Munyuki    schedule 05.07.2016
comment
Ответ Кита ниже правильный. Вам также необходимо определить сервер сбора данных, а не только клиент. Просто переместите эту строку в файл, который используется клиентом и сервером.   -  person Christian Fritz    schedule 05.07.2016


Ответы (2)


вам нужно определить

CategoryCollection = new Mongo.Collection("CategoryCollection");

на стороне сервера и на стороне клиента.

person Keith Nicholas    schedule 04.07.2016

В основном вы ищете "id", где "id" не определено.

Попробуйте передать методу "id" документа, если он у вас есть:

Meteor.methods({
  'findCategory': function(id, name) {
    return Meteor.CategoryCollection.findOne({
      _id: id          
}, {
      fields: { 'name': name }
    });
  }
});

Если вы хотите найти поля: { 'name': 1 } в любом документе, пропустите первый раздел объекта { _id: id.

Meteor.methods({
      'findCategory': function(name) {
        return Meteor.CategoryCollection.findOne({
          fields: { 'name': name }
        });
      }
    });
person Luis    schedule 05.07.2016