sql >> Databáze >  >> NoSQL >> MongoDB

Průvodce MongoDB BSON

1. Úvod

V tomto tutoriálu se podíváme na BSON a na to, jak jej můžeme použít k interakci s MongoDB.

Nyní podrobný popis MongoDB a všech jeho schopností přesahuje rozsah tohoto článku. Bude však užitečné porozumět několika klíčovým pojmům.

MongoDB je distribuovaný nástroj pro ukládání dokumentů NoSQL. Dokumenty jsou uloženy jako data BSON a seskupeny do kolekcí. Dokumenty v kolekci jsou analogické s řádky v tabulce relační databáze .

Pro podrobnější pohled se podívejte na úvodní článek MongoDB.

2. Co je BSON ?

BSON je zkratka pro Binary JSON . Je to protokol pro binární serializaci dat podobných JSON.

JSON je formát pro výměnu dat, který je oblíbený v moderních webových službách. Poskytuje flexibilní způsob, jak reprezentovat složité datové struktury.

BSON poskytuje několik výhod oproti použití běžného JSON:

  • Kompaktní:Ve většině případů vyžaduje uložení struktury BSON méně místa než její ekvivalent JSON
  • Typy dat:BSON poskytuje další typy dat nenajdete v běžném JSON, jako je Datum a BinData

Jednou z hlavních výhod používání BSON je snadné procházení . Dokumenty BSON obsahují další metadata, která umožňují snadnou manipulaci s poli dokumentu, aniž byste museli číst celý dokument samotný.

3. Ovladač MongoDB

Nyní, když máme základní znalosti o BSON a MongoDB, pojďme se podívat na to, jak je používat společně. Zaměříme se na hlavní akce ze zkratky CRUD (C reate, R ead, U pdate, D elete).

MongoDB poskytuje softwarové ovladače pro většinu moderních programovacích jazyků. Ovladače jsou založeny na knihovně BSON , což znamená, že při vytváření dotazů budeme pracovat přímo s BSON API. Další informace naleznete v našem průvodci dotazovacím jazykem MongoDB.

V této části se podíváme na použití ovladače pro připojení ke clusteru a použití BSON API k provádění různých typů dotazů. Všimněte si, že ovladač MongoDB poskytuje Filtry třída, která nám může pomoci napsat kompaktnější kód. V tomto tutoriálu se však zaměříme výhradně na použití základního rozhraní BSON API.

Jako alternativu k přímému použití ovladače MongoDB a BSON se podívejte na našeho průvodce Spring Data MongoDB.

3.1. Připojování

Chcete-li začít, nejprve přidáme ovladač MongoDB jako závislost do naší aplikace:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>3.10.1</version>
</dependency>

Poté vytvoříme připojení k databázi a kolekci MongoDB:

MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("myDB");
MongoCollection<Document> collection = database.getCollection("employees");

Zbývající části se budou zabývat vytvářením dotazů pomocí kolekce odkaz.

3.2. Vložit

Řekněme, že máme následující JSON, který chceme vložit jako nový dokument do zaměstnanců kolekce:

{
  "first_name" : "Joe",
  "last_name" : "Smith",
  "title" : "Java Developer",
  "years_of_service" : 3,
  "skills" : ["java","spring","mongodb"],
  "manager" : {
     "first_name" : "Sally",
     "last_name" : "Johanson"
  }
}

Tento příklad JSON ukazuje nejběžnější datové typy, se kterými se můžeme setkat u dokumentů MongoDB:textové, číselné, pole a vložené dokumenty.

K vložení pomocí BSON bychom použili Dokument MongoDB API:

Document employee = new Document()
    .append("first_name", "Joe")
    .append("last_name", "Smith")
    .append("title", "Java Developer")
    .append("years_of_service", 3)
    .append("skills", Arrays.asList("java", "spring", "mongodb"))
    .append("manager", new Document()
                           .append("first_name", "Sally")
                           .append("last_name", "Johanson"));
collection.insertOne(employee);

Dokument class je primární API používané v BSON. Rozšiřuje mapu Java rozhraní a obsahuje několik přetížených metod. To usnadňuje práci s nativními typy i běžnými objekty, jako jsou ID objektů, data a seznamy.

3.3. Najít

Chcete-li najít dokument v MongoDB, poskytujeme vyhledávací dokument, který určuje, na která pole se má dotazovat. Například k vyhledání všech dokumentů, které mají příjmení „Smith“, bychom použili následující dokument JSON:

{  
  "last_name": "Smith"
}

Napsáno v BSON by to bylo:

Document query = new Document("last_name", "Smith");
List results = new ArrayList<>();
collection.find(query).into(results);

Dotazy „Najít“ mohou přijímat více polí a výchozím chováním je použití logického a operátora, aby je spojil. To znamená, že budou vráceny pouze dokumenty, které odpovídají všem polím .

Chcete-li to obejít, MongoDB poskytuje nebo operátor dotazu:

{
  "$or": [
    { "first_name": "Joe" },
    { "last_name":"Smith" }
  ]
}

Najde všechny dokumenty, které mají buď křestní jméno „Joe“ nebo příjmení „Smith“. Abychom to zapsali jako BSON, použili bychom vnořený Dokument stejně jako výše uvedený vkládací dotaz:

Document query = 
  new Document("$or", Arrays.asList(
      new Document("last_name", "Smith"),
      new Document("first_name", "Joe")));
List results = new ArrayList<>();
collection.find(query).into(results);

3.4. Aktualizovat

Aktualizační dotazy se v MongoDB trochu liší, protože vyžadují dva dokumenty :

  1. Kritéria filtru pro nalezení jednoho nebo více dokumentů
  2. Aktualizační dokument určující, která pole se mají upravit

Řekněme například, že chceme přidat „bezpečnostní“ dovednost každému zaměstnanci, který již „jarní“ dovednost má. První dokument najde všechny zaměstnance s „jarními“ dovednostmi a druhý přidá do pole dovedností novou položku „bezpečnost“.

V JSON by tyto dva dotazy vypadaly takto:

{
  "skills": { 
    $elemMatch:  { 
      "$eq": "spring"
    }
  }
}

{
  "$push": { 
    "skills": "security"
  }
}

A v BSON by to byly:

Document query = new Document(
  "skills",
  new Document(
    "$elemMatch",
    new Document("$eq", "spring")));
Document update = new Document(
  "$push",
  new Document("skills", "security"));
collection.updateMany(query, update);

3.5. Smazat

Odstranění dotazů v MongoDB používá stejnou syntaxi jako vyhledávací dotazy. Jednoduše poskytujeme dokument, který specifikuje jedno nebo více kritérií, která se mají shodovat.

Řekněme například, že jsme našli chybu v naší databázi zaměstnanců a omylem vytvořili zaměstnance se zápornou hodnotou za roky služby. Abychom je našli všechny, použili bychom následující JSON:

{
  "years_of_service" : { 
    "$lt" : 0
  }
}

Ekvivalentní dokument BSON by byl:

Document query = new Document(
  "years_of_service", 
  new Document("$lt", 0));
collection.deleteMany(query);

  1. Architektonické vzory pro zpracování dat téměř v reálném čase pomocí Apache Hadoop

  2. ID objektu nodejs mongodb na řetězec

  3. Jak se MongoDB liší od databáze SQL

  4. potíže s nastavením backendu celerových úloh v Pythonu