MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Meteor - Защо трябва да използвам this.userId над Meteor.userId(), когато е възможно?

Вашият въпрос изглежда обединява Meteor.userId() и Meteor.user() . Изглежда, че тялото на въпроса пита за първото, докато темата пита за второто. Ще се опитам да разгледам и двете.

  1. На сървъра, в рамките на функция за публикуване, извикване на Meteor.userId() или Meteor.user() ще причини грешка . Вместо това използвайте this.userId или Meteor.users.findOne(this.userId) , съответно. Обърнете внимание обаче, че функцията за публикуване се извиква само когато клиент се абонира. Ако искате публикацията да се промени, когато потребителският запис се промени, ще трябва да observe() курсорът, върнат от Meteor.users.find(this.userId) и предприема подходящи действия, когато записът се промени.
  2. На сървъра, докато се обработва извикване на метод, Meteor.userId() и Meteor.user() ще съответства съответно на ID на викащия потребител и неговия запис. Имайте предвид обаче, че извикванията на Meteor.user() ще доведе до заявка в DB, ​​защото те са по същество е еквивалентен на Meteor.users.findOne(Meteor.userId()) .

    Директно в извикване на метод можете също да използвате this.userId вместо Meteor.userId() , но е малко вероятно да видите значителна разлика в производителността. Когато сървърът получи извикването на метода, той изпълнява внедряването на вашия метод с идентификатора на потребителя (и друга информация) съхранявани в конкретен слот върху влакното. Meteor.userId() просто извлича идентификатора от слота на текущото влакно. Това трябва да е бързо.

    Обикновено е по-лесно да се преработи код, който използва Meteor.userId() отколкото this.userId защото не можете да използвате this.userId извън тялото на метода (напр. this няма да има свойство „userId“ във функция, която извиквате от тялото на метода) и не можете да използвате this.userId на клиента.

  3. На клиента, Meteor.userId() и Meteor.user() няма да генерира грешки и this.userId няма да работи. Извиква Meteor.user() по същество са еквивалентни на Meteor.users.findOne(Meteor.userId()) , но тъй като това съответства на мини-монго DB заявка, производителността вероятно няма да бъде проблем. От съображения за сигурност обаче обектът, върнат от Meteor.user() може да е непълна (особено ако autopublish пакетът не е инсталиран).


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoid или MongoMapper?

  2. MongoDB :рамка за агрегиране:$ съвпадение между полета

  3. Mongoose.aggregate(pipeline) свързва множество колекции с помощта на $unwind, $lookup, $group

  4. MongoDB:запитвания за кръстосано събиране

  5. Проверете дали полето съществува в поддокумент на масив