sql >> Database >  >> NoSQL >> MongoDB

Meteor - Waarom zou ik waar mogelijk this.userId boven Meteor.userId() gebruiken?

Uw vraag lijkt Meteor.userId() . samen te voegen en Meteor.user() . De kern van de vraag lijkt over het eerste te vragen, terwijl de onderwerpregel over het laatste vraagt. Ik zal proberen beide aan te pakken.

  1. Op de server, binnen een publicatiefunctie, die Meteor.userId() aanroept of Meteor.user() zal een fout veroorzaken . Gebruik in plaats daarvan this.userId of Meteor.users.findOne(this.userId) , respectievelijk. Houd er echter rekening mee dat de publicatiefunctie alleen wordt aangeroepen wanneer een klant zich abonneert. Als u wilt dat de publicatie verandert wanneer het gebruikersrecord verandert, moet u observe() de cursor geretourneerd door Meteor.users.find(this.userId) en passende actie ondernemen wanneer het record verandert.
  2. Op de server, terwijl een methodeaanroep wordt verwerkt, Meteor.userId() en Meteor.user() komt overeen met respectievelijk de ID van de bellende gebruiker en diens record. Houd er echter rekening mee dat oproepen naar Meteor.user() zal resulteren in een DB-query omdat ze zijn in wezen gelijk aan Meteor.users.findOne(Meteor.userId()) .

    Direct binnen een methodeaanroep kunt u ook this.userId . gebruiken in plaats van Meteor.userId() , maar het is onwaarschijnlijk dat u een significant prestatieverschil zult zien. Wanneer de server de methodeaanroep ontvangt, wordt deze voert uw methode-implementatie uit met de gebruikers-ID (en wat andere informatie) opgeslagen in een bepaalde Meteor.userId() haalt gewoon de ID uit de sleuf op de huidige vezel. Dat moet snel zijn.

    Het is over het algemeen gemakkelijker om code te refactoren die gebruikmaakt van Meteor.userId() dan this.userId omdat u this.userId . niet kunt gebruiken buiten de hoofdtekst van de methode (bijv. this heeft geen eigenschap 'userId' binnen een functie die u aanroept vanuit de body van de methode) en u kunt this.userId niet gebruiken op de klant.

  3. Op de client, Meteor.userId() en Meteor.user() zal geen fouten genereren en this.userId zal niet werken. Oproepen naar Meteor.user() zijn in wezen gelijk aan Meteor.users.findOne(Meteor.userId()) , maar aangezien dit overeenkomt met een mini-mongo DB-query, zullen de prestaties waarschijnlijk geen probleem zijn. Om veiligheidsredenen is het object echter geretourneerd door Meteor.user() kan onvolledig zijn (vooral als de autopublish pakket is niet geïnstalleerd).


  1. MongoException:sleutels met een lengte van nul zijn niet toegestaan, heb je $ met dubbele aanhalingstekens gebruikt?

  2. MongoDB-query voor alle documenten met uniek veld

  3. Nieuw bij MongoDB Kan opdracht mongo niet uitvoeren

  4. Transformeer MongoDB-gegevens op Zoeken