Implementace vlastního hodnocení pro záznamy z databáze MongoDB v Node.js

Tento článek nám poskytne informace o tom, jak seřadit záznamy z databáze MongoDB. Do sort() přidáme trochu funkce řazení funkce pro zadání pozic záznamů.

Nakonec budeme schopni:

  • Nainstalujte a nakonfigurujte ovladač MongoDB v aplikaci Node.js pomocí Správce balíčků uzlů.
  • Dotaz a řazení výsledků z databáze MongoDb.
  • Použijte pole k zadání vlastního hodnocení záznamů.

Obsah

  1. Předpoklad
  2. Úvod
  3. Co budeme dělat
  4. Začínáme
  5. Vytvoření naší databáze
  6. Vytváření naší sbírky
  7. Vkládání dokumentů do naší tabulky
  8. Dotazování a hodnocení našich dokumentů
  9. Závěr
  10. Další čtení

Předpoklad

Předpokladem je, že čtenář musí mít:

  1. Základní znalost operací Node.js a MongoDB.
  2. Node.js a MongoDB nainstalované ve vašem počítači.

Úvod

V našich každodenních životních problémech bychom v jednu chvíli potřebovali třídit naše data, abychom získali více informací o tom, jak postupovat v našich operacích.

Například ve školním uspořádání potřebujeme analyzovat výsledky studentů a dát jim vhodné pozice na základě jejich výkonu. Vzhledem k tomu musíme mít vždy na paměti, že dva nebo více z nich získá stejnou známku nebo body.

Jako vývojáři musíme naprogramovat systém tak, aby studentům přidělil stejnou pozici a dalšímu studentovi, který bude následovat po nich, patřičně zvýšenou pozici.

Například pro těchto pět studentů a jejich body bychom postupovali následovně:

Jméno studenta Body Pozice
Student 1 21 POS 1
Student 2 38 POS 2
Student 3 90 POS 3
Student 4 90 POS 4
Student 5 58 POS 5

Po seřazení:

Jméno studenta Body Pozice
Student 3 90 POS 1
Student 4 90 POS 1
Student 5 58 POS 3
Student 2 38 POS 4
Student 1 21 POS 5

Jak vidíme, první dva studenti jsou na stejné pozici (POS 1 ) a další student začíná od pozice 3 (POS 3 ).

Jedním ze skvělých způsobů, jak toho dosáhnout, je použití MongoDB sort() metoda. Jediným problémem pro nás je postarat se o kravaty a dát jim vhodné pozice.

V tomto článku se podíváme na to, jak použít pole v Node.js, abychom toho dosáhli z dokumentů (záznamů) z databáze MongoDB.

Co budeme dělat

Navážeme připojení k databázi MongoDB, vložíme nějaká fiktivní data a seřadíme je pomocí vlastní funkce hodnocení.

Začínáme

Nejprve musíme nainstalovat ovladač MongoDB, který nám umožní připojení k databázi.

Otevřete terminál a zadejte tento příkaz:

npm install mongodb

Vytváření naší databáze

Vytvoříme novou databázi s názvem ourDB , kde budeme ukládat naše záznamy (nazývané documents v MongoDB).

Vytvořte nový soubor s názvem database.js pak napište následující kód:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/ourDB";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  console.log("Database created!");
  db.close();
});

Spusťte kód spuštěním příkazu níže ve vašem terminálu:

node database.js

Ke spuštění kódu použijeme příkaz node [FILENAME] .

Vytváření naší sbírky

Poté přistoupíme k vytvoření tabulky (collection v MongoDB) nazýváme naše ourTable , kde jsou naše záznamy (documents ) bude vložen a dotazován z.

Vytvořte nový soubor s názvem collection.js a poté zadejte následující kód:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  var dbo = db.db("ourDB");
  dbo.createCollection("ourTable", function(err, res) {
    if (err) throw err;
    console.log("Collection created!");
    db.close();
  });
});

Výše uvedený fragment kódu vytvoří připojení MongoDB a vytvoří novou kolekci s názvem ourTable .

Vkládání dokumentů do naší tabulky

Pro demonstraci vložíme do naší sbírky fiktivní data 10 studentů.

Vytvořte soubor s názvem insert.js a poté přidejte následující kód:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  var dbo = db.db("ourDB");
  var myobj = [
    { name: 'John', mark: '71'},
    { name: 'Doe', mark: '44'},
    { name: 'Lorem', mark: '52'},
    { name: 'Ipsum', mark: '21'},
    { name: 'Tony', mark: '21'},
    { name: 'Stark', mark: '51'},
    { name: 'Steve', mark: '22'},
    { name: 'Mike', mark: '11'},
    { name: 'Holmes', mark: '88'},
    { name: 'Dave', mark: '71'}
  ];
  dbo.collection("ourTable").insertMany(myobj, function(err, res) {
    if (err) throw err;
    console.log("Number of documents inserted: " + res.insertedCount);
    db.close();
  });
});

Dotazování a hodnocení našich dokumentů

Zde je jádro tohoto článku.

Budeme se dotazovat a třídit studenty pomocí jejich známek v sestupném pořadí. Poté doplníme celkové známky do pole a provedeme podmíněné kontroly, abychom zkontrolovali shody a přiřadili pořadí.

Vytvoříme nový soubor s názvem rank.js a poté přidejte následující kód.

// establishing a connection to the database
var MongoClient = require('mongodb').MongoClient;
// connection url
var url = "mongodb://localhost:27017/";
// declaring an array and a variable to be used for the database manipulation
let rankArray = [];
let dbo;

// connecting and calling the loadStudents() function
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    dbo = db.db("ourDB");
    loadStudents();
    db.close();
});

Máme dvě funkce loadStudents() a giveRank() .

loadStudents() funkce načte detaily studenta z databáze a seřadí je v sestupném pořadí pomocí sort() metoda.

Obsahuje for loop který vyplní značky načtené do rankArray() , který použijeme později.

Druhá funkce giveRank() je poté zavolán, aby provedl hodnocení pomocí rankArray a results .

function loadStudents(){
    // specifying a descending sort
    var mysort = { mark: -1 };
    // querying and loading into a resultSet array
    dbo.collection("ourTable").find().sort(mysort).toArray(function(err, result) {
      // check for any error and throw it
      if (err) throw err;
      // populating the rank array with the marks
      for (let i = 0; i < result.length; i++) {
          rankArray[i] = result[i]['mark'];
      }
      // passing the rank array and the resultset to the giveRank() function
      giveRank(rankArray,result);
    });
}

giveRank() funkce má dva argumenty:pole a sadu výsledků.

// function for giving rank
function giveRank(arrayArg,resultArg){
  // declaring and initilising variables
    let rank = 1;
    prev_rank = rank;
    position = 0;
    // displaying the headers in the console
    console.log('\n-------OUR RESULTS------\n');
    console.log('Name | Mark | Position\n');
    // looping through the rank array
    for (i = 0; i < arrayArg.length ; i ++) {
            /*
            If it is the first index, then automatically the position becomes 1.
            */
            if(i == 0) {
                position = rank;
            console.log (resultArg[i]['name']+"\t"+arrayArg[i]+"\t"+position)+"\n";

            /*
            if the value contained in `[i]` is not equal to `[i-1]`, increment the `rank` value and assign it to `position`.
            The `prev_rank` is assigned the `rank` value.
            */
            } else if(arrayArg[i] != arrayArg[i-1]) {
            rank ++;
            position = rank;
            prev_rank = rank;
            console.log(resultArg[i]['name']+"\t"+arrayArg[i]+"\t"+position)+"\n";

            /*
            Otherwise, if the value contained in `[i]` is equal to `[i-1]`,
            assign the position the value stored in the `prev_rank` variable then increment the value stored in the `rank` variable.*/
            } else {
                position = prev_rank;
                rank ++;
                console.log (resultArg[i]['name']+"\t"+arrayArg[i]+"\t"+position)+"\n";
            }
    }
}

Má tři proměnné:

  1. rank – Toto řídí počet smyček použitých k zobrazení vhodně navýšené pozice, např. 1,1,3 a ne 1,1,2 .> Inicializujeme jej na 1 , protože indexujeme pozice od 1 , nikoli 0 .
  2. prev_rank - Předchozí pořadí se používá k zobrazení pozice pořadí v případě nerozhodného výsledku. Ukládá aktuální pozici [i] studenta, takže když se smyčka zvýší na další pozici[i+1] , aktuální pozici [i] je dočasně uložena. V důsledku toho se aktuální poloha změní na [i-1] a další vytvořil [i] .[i] je přiřazeno předchozí hodnocení a přiřazeno dalšímu indexu pole, pokud je hodnota nalezena na [i] je stejný jako [i-1] . Má přiřazeno 1 na první pozici.
  3. position - Toto uloží pořadí, které se má zobrazit. Inicializujeme jej na 0 ve kterém na inicializované hodnotě nezáleží, protože pozice je přiřazena uvnitř for loop . Můžete jej inicializovat na libovolnou číslici.

for loop obsahuje if-else-if struktura pro kontrolu hodnot a jejich vhodné přiřazení.

Pokud se jedná o první index, pozice se automaticky změní na 1 .

Pokud je hodnota obsažena v [i] se nerovná [i-1] , zvyšte rank hodnotu a přiřaďte ji position . prev_rank má přiřazeno rank hodnotu znovu, jak jsme diskutovali výše.

Jinak, pokud je hodnota obsažena v [i] se rovná [i-1] , přiřaďte pozici hodnotě uložené v prev_rank potom zvýšit hodnotu uloženou v rank proměnná.

Snímek obrazovky výstupu

Závěr

Prošli jsme si, jak vytvořit databázi, kolekci, jak do ní vkládat data a dotazovat se na výsledky. Dále jsme se také podívali na to, jak provádět hodnocení záznamů pomocí pole v MongoDB.

Doufám, že máte nějaké užitečné poznatky.

Šťastné kódování.

Další čtení

  • MongoDB npm
  • W3Schools