15 Matching Annotations
  1. Jan 2024
    1. Instance methods Instances of Models are documents. Documents have many of their own built-in instance methods. We may also define our own custom document instance methods. // define a schema const animalSchema = new Schema({ name: String, type: String }, { // Assign a function to the "methods" object of our animalSchema through schema options. // By following this approach, there is no need to create a separate TS type to define the type of the instance functions. methods: { findSimilarTypes(cb) { return mongoose.model('Animal').find({ type: this.type }, cb); } } }); // Or, assign a function to the "methods" object of our animalSchema animalSchema.methods.findSimilarTypes = function(cb) { return mongoose.model('Animal').find({ type: this.type }, cb); }; Now all of our animal instances have a findSimilarTypes method available to them. const Animal = mongoose.model('Animal', animalSchema); const dog = new Animal({ type: 'dog' }); dog.findSimilarTypes((err, dogs) => { console.log(dogs); // woof }); Overwriting a default mongoose document method may lead to unpredictable results. See this for more details. The example above uses the Schema.methods object directly to save an instance method. You can also use the Schema.method() helper as described here. Do not declare methods using ES6 arrow functions (=>). Arrow functions explicitly prevent binding this, so your method will not have access to the document and the above examples will not work.

      Certainly! Let's break down the provided code snippets:

      1. What is it and why is it used?

      In Mongoose, a schema is a blueprint for defining the structure of documents within a collection. When you define a schema, you can also attach methods to it. These methods become instance methods, meaning they are available on the individual documents (instances) created from that schema.

      Instance methods are useful for encapsulating functionality related to a specific document or model instance. They allow you to define custom behavior that can be executed on a specific document. In the given example, the findSimilarTypes method is added to instances of the Animal model, making it easy to find other animals of the same type.

      2. Syntax:

      Using methods object directly in the schema options:

      javascript const animalSchema = new Schema( { name: String, type: String }, { methods: { findSimilarTypes(cb) { return mongoose.model('Animal').find({ type: this.type }, cb); } } } );

      Using methods object directly in the schema:

      javascript animalSchema.methods.findSimilarTypes = function(cb) { return mongoose.model('Animal').find({ type: this.type }, cb); };

      Using Schema.method() helper:

      javascript animalSchema.method('findSimilarTypes', function(cb) { return mongoose.model('Animal').find({ type: this.type }, cb); });

      3. Explanation in Simple Words with Examples:

      Why it's Used:

      Imagine you have a collection of animals in your database, and you want to find other animals of the same type. Instead of writing the same logic repeatedly, you can define a method that can be called on each animal instance to find similar types. This helps in keeping your code DRY (Don't Repeat Yourself) and makes it easier to maintain.

      Example:

      ```javascript const mongoose = require('mongoose'); const { Schema } = mongoose;

      // Define a schema with a custom instance method const animalSchema = new Schema({ name: String, type: String });

      // Add a custom instance method to find similar types animalSchema.methods.findSimilarTypes = function(cb) { return mongoose.model('Animal').find({ type: this.type }, cb); };

      // Create the Animal model using the schema const Animal = mongoose.model('Animal', animalSchema);

      // Create an instance of Animal const dog = new Animal({ type: 'dog', name: 'Buddy' });

      // Use the custom method to find similar types dog.findSimilarTypes((err, similarAnimals) => { console.log(similarAnimals); }); ```

      In this example, findSimilarTypes is a custom instance method added to the Animal schema. When you create an instance of the Animal model (e.g., a dog), you can then call findSimilarTypes on that instance to find other animals with the same type. The method uses the this.type property, which refers to the type of the current animal instance. This allows you to easily reuse the logic for finding similar types across different instances of the Animal model.

      Certainly! Let's go through each part and explain it in simple terms: ### 1. `this` in Mongoose: - **What is `this`?** In JavaScript, `this` refers to the current context or object. In Mongoose, particularly within methods and middleware functions, `this` represents the instance (document) the function is currently operating on. - **Why is it used?** `this` is used to access and modify the properties of the current document. For example, in a Mongoose method, `this` allows you to refer to the fields of the specific document the method is called on. ### 2. Example: Let's use the `userSchema.pre("save", ...)`, which is a Mongoose middleware, as an example: ```javascript userSchema.pre("save", async function (next) { if (!this.isModified("password")) { next(); } else { this.password = await bcrypt.hash(this.password, 10); next(); } }); ``` - **Explanation in Simple Words:** - Imagine you have a system where users can sign up and set their password. - Before saving a new user to the database, you want to ensure that the password is securely encrypted (hashed) using a library like `bcrypt`. - The `userSchema.pre("save", ...)` is a special function that runs automatically before saving a user to the database. - In this function: - `this.isModified("password")`: Checks if the password field of the current user has been changed. - If the password is not modified, it means the user is not updating their password, so it just moves on to the next operation (saving the user). - If the password is modified, it means a new password is set or the existing one is changed. In this case, it uses `bcrypt.hash` to encrypt (hash) the password before saving it to the database. - The use of `this` here is crucial because it allows you to refer to the specific user document that's being saved. It ensures that the correct password is hashed for the current user being processed. In summary, `this` in Mongoose is a way to refer to the current document or instance, and it's commonly used to access and modify the properties of that document, especially in middleware functions like the one demonstrated here for password encryption before saving to the database.

    Tags

    Annotators

    URL

  2. Oct 2023
    1. Eukaryotic single-celled organisms appear in the fossil record perhaps by 1.6 BYA (Knoll et al., 2006). Yet for a “boring billion” years of evolutionary history, they remain minor components in bacterial-dominated ecosystems before explosively radiating as large, multicellular species in an Ediacaran and Cambrian MST. Eukaryotes are obviously essential for this MST, as all animals, plants and fungi are eukaryotes. However, the initial appearance of eukaryotic cells seems insufficient for a MST.
      • for: example, example - MET and FET insufficient for MST

      • example: MET and FET insufficient for MST

      • paraphrase

        • Eukaryotic single-celled organisms appear in the fossil record by approx. 1.6 BYA (Knoll et al., 2006).
        • Yet for a “boring billion” years of evolutionary history, they remain minor components in bacterial-dominated ecosystems
          • before explosively radiating as large, multicellular species in
            • an Ediacaran and
            • Cambrian MST.
        • Eukaryotes are obviously essential for this MST, as all
          • animals,
          • plants and
          • fungi
        • are eukaryotes.

        • However, the initial appearance of eukaryotic cells seems insufficient for a MST

  3. Nov 2022
  4. Sep 2021
    1. Analytics modules that run in the background, monitor user interaction, and send the data to a server.
    2. Many jQuery plugins attach themselves to the global jQuery object.
    3. A polyfill for example, might not do anything, because it finds that the feature that it enables is already supported by the browser.
  5. Apr 2021
    1. We are continuing an overhaul of our default startup editor in order to provide relevant extension-contributed tips and walkthroughs, intended to make both core VS Code features and extension contributions more approachable to new users.
  6. Feb 2021
    1. Are designers also wasting the time of the critics?

      Wow what a way to end the chapter. Are instcutional Designers wasting their time decorating their instruction or filling them with jargon that they miss the point of educating the learners.

      This is a wonderful story about something that anyone could be familiar with and understand how instrucitonal design can go at times. Lending to the attractiveness and lacking on the informing side.

  7. Nov 2020
  8. Aug 2020
    1. But it's easy to imagine that the caption was incorrect for too long because those who know the language, know where the mistake is, and those who don't, think that it's the correct way to spell it.

      those who know the language, know where the mistake is, In other words, they can easily spot the mistake and no better than to repeat it themselves, but either are powerless or too lazy to actually fix it on SE.

      and those who don't, think that it's the correct way to spell it. So those who should no better are inadvertently perpetuating the mistake and teaching others that it is an acceptable/correct usage.

  9. May 2020
    1. In algebra, for some set S together with an operation ⋆ {\displaystyle \star } to form a group, it is necessary that ⋆ {\displaystyle \star } be associative.

      Seems like a simpler example (of individually necessary and jointly sufficient) that is easier to follow could be found.

  10. Aug 2019
    1. I was so fed up of the mega amounts of boilerplate with Redux and the recommendation of keeping your data loading at view level. It seems to me that things like this, with components being responsible for their own data, is the way to go in the future.
  11. Jan 2018
  12. doc-0o-c0-docs.googleusercontent.com doc-0o-c0-docs.googleusercontent.com
    1. It wasn’t all that long ago (well, at least, when you’re my age) that one network—AT&T—ran the whole show.

      Beginning of historical example of AT&T's monopoly.

    2. In spite of all the monopolist’s alarm bells that this decision meant the end of network qualityand the end of reliable service as we knew it, just the opposite came to pass. The idea of having a network that couldn’t discriminate against innovators who wanted to improve it finallybegan to break the choke-hold that the gatekeeper had on the system.

      Conclusion to the history of AT&T example of monopoly of an industry.

    3. previous telecommunications and media technologies, also conceived in openness, eventually fell victim to consolidated control bya few powerful interests, speculative mania by investors, and mistaken government policies which assumed that wise public policywas no public policy.

      General reference to history of monopoly of telecommunications when no gov. policies are in place.