MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Meteor — Dlaczego powinienem używać this.userId zamiast Meteor.userId(), gdy tylko jest to możliwe?

Twoje pytanie wydaje się łączyć Meteor.userId() i Meteor.user() . Treść pytania wydaje się pytać o to pierwsze, podczas gdy w temacie pytania o to drugie. Postaram się zająć obiema kwestiami.

  1. Na serwerze, w ramach funkcji publikowania, wywołując metodę Meteor.userId() lub Meteor.user() czy spowoduje błąd . Zamiast tego użyj this.userId lub Meteor.users.findOne(this.userId) , odpowiednio. Należy jednak pamiętać, że funkcja publikowania jest wywoływana tylko wtedy, gdy klient subskrybuje. Jeśli chcesz, aby publikacja zmieniała się po zmianie rekordu użytkownika, musisz wykonać observe() kursor zwrócony przez Meteor.users.find(this.userId) i podejmij odpowiednie działania, gdy rekord się zmieni.
  2. Na serwerze, podczas przetwarzania wywołania metody, Meteor.userId() i Meteor.user() będzie odpowiadać odpowiednio identyfikatorowi dzwoniącego użytkownika i jego zapisowi. Należy jednak pamiętać, że wywołania Meteor.user() spowoduje zapytanie do bazy danych, ponieważ są one zasadniczo odpowiednik Meteor.users.findOne(Meteor.userId()) .

    Bezpośrednio w wywołaniu metody możesz również użyć this.userId zamiast Meteor.userId() , ale jest mało prawdopodobne, że zobaczysz znaczącą różnicę w wydajności. Gdy serwer otrzyma wywołanie metody, uruchamia implementację metody z identyfikatorem użytkownika (i kilkoma innymi informacjami) przechowywane w konkretnym s na włóknie. Meteor.userId() po prostu pobiera identyfikator z gniazda na bieżącym włóknie. To powinno być szybkie.

    Generalnie łatwiej jest zrefaktoryzować kod, który używa Meteor.userId() niż this.userId ponieważ nie możesz użyć this.userId poza treścią metody (np. this nie będzie miała właściwości „userId” w funkcji, którą wywołujesz z treści metody) i nie możesz użyć this.userId na kliencie.

  3. Na kliencie Meteor.userId() i Meteor.user() nie zwróci błędów i this.userId nie będzie działać. Wywołuje Meteor.user()zasadniczo równoważne Meteor.users.findOne(Meteor.userId()) , ale ponieważ odpowiada to zapytaniu mini-mongo DB, wydajność prawdopodobnie nie będzie problemem. Jednak ze względów bezpieczeństwa obiekt zwrócony przez Meteor.user() może być niekompletna (zwłaszcza jeśli autopublish pakiet nie jest zainstalowany).


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. pymongo - Długość wiadomości jest większa niż maksymalny rozmiar wiadomości na serwerze

  2. Jak zapisać 1 milion rekordów w mongodb asynchronicznie?

  3. MongoDB — głosowanie za komentarzami/głosowanie przeciw za pomocą potoku agregacji

  4. MongoDB:Połącz wyszukiwanie tekstowe i zapytanie geoprzestrzenne

  5. Indeks wyszukiwania pełnotekstowego MongoDB:błąd:za dużo indeksu tekstowego, dlaczego?