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

MongoDB:Połącz dane z wielu kolekcji w jedną..jak?

MongoDB 3.2 umożliwia teraz łączenie danych z wielu kolekcji w jeden na etapie agregacji $lookup. Jako praktyczny przykład powiedzmy, że masz dane o książkach podzielone na dwie różne kolekcje.

Pierwsza kolekcja o nazwie books , posiadający następujące dane:

{
    "isbn": "978-3-16-148410-0",
    "title": "Some cool book",
    "author": "John Doe"
}
{
    "isbn": "978-3-16-148999-9",
    "title": "Another awesome book",
    "author": "Jane Roe"
}

I druga kolekcja o nazwie books_selling_data , posiadający następujące dane:

{
    "_id": ObjectId("56e31bcf76cdf52e541d9d26"),
    "isbn": "978-3-16-148410-0",
    "copies_sold": 12500
}
{
    "_id": ObjectId("56e31ce076cdf52e541d9d28"),
    "isbn": "978-3-16-148999-9",
    "copies_sold": 720050
}
{
    "_id": ObjectId("56e31ce076cdf52e541d9d29"),
    "isbn": "978-3-16-148999-9",
    "copies_sold": 1000
}

Aby połączyć obie kolekcje, wystarczy użyć $lookup w następujący sposób:

db.books.aggregate([{
    $lookup: {
            from: "books_selling_data",
            localField: "isbn",
            foreignField: "isbn",
            as: "copies_sold"
        }
}])

Po tej agregacji books kolekcja będzie wyglądać następująco:

{
    "isbn": "978-3-16-148410-0",
    "title": "Some cool book",
    "author": "John Doe",
    "copies_sold": [
        {
            "_id": ObjectId("56e31bcf76cdf52e541d9d26"),
            "isbn": "978-3-16-148410-0",
            "copies_sold": 12500
        }
    ]
}
{
    "isbn": "978-3-16-148999-9",
    "title": "Another awesome book",
    "author": "Jane Roe",
    "copies_sold": [
        {
            "_id": ObjectId("56e31ce076cdf52e541d9d28"),
            "isbn": "978-3-16-148999-9",
            "copies_sold": 720050
        },
        {
            "_id": ObjectId("56e31ce076cdf52e541d9d28"),
            "isbn": "978-3-16-148999-9",
            "copies_sold": 1000
        }
    ]
}

Należy zwrócić uwagę na kilka rzeczy:

  1. Kolekcja „from”, w tym przypadku books_selling_data , nie można podzielić na fragmenty.
  2. Pole „as” będzie tablicą, jak w powyższym przykładzie.
  3. Opcje „localField” i „foreignField” na etapie $lookup będą traktowane jako puste w celu dopasowania, jeśli nie istnieją w odpowiednich kolekcjach (dokumentacja $lookup ma na to doskonały przykład).

Podsumowując, jeśli chcesz skonsolidować obie kolekcje, mając w tym przypadku płaskie pole kopie_sprzedane z całkowitą liczbą sprzedanych egzemplarzy, będziesz musiał popracować trochę więcej, prawdopodobnie korzystając z kolekcji pośredniej, która wtedy wyjdź do ostatecznej kolekcji.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nie można połączyć się z mongoDB uruchomioną w kontenerze docker

  2. Jak korzystać z MongoRegex (sterownik MongoDB C#)

  3. W MongoDB szukaj w tablicy i sortuj według liczby dopasowań

  4. Nie znaleziono klasy „MongoClient”

  5. Podstawy replikacji łańcucha MongoDB