

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Apa itu database dokumen?
<a name="what-is-document-db"></a>

Beberapa developer tidak memikirkan model data mereka dalam hal baris dan kolom normal. Biasanya, di tingkat aplikasi, data direpresentasikan sebagai dokumen JSON karena lebih intuitif bagi developer untuk memikirkan model data mereka sebagai dokumen. 

Popularitas basis data dokumen telah berkembang karena basis data dokumen ini membuat Anda dapat mempertahanan data dalam basis data dengan menggunakan format model dokumen yang sama yang Anda gunakan dalam kode aplikasi Anda. Database dokumen memberikan yang kuat dan intuitif APIs untuk pengembangan yang fleksibel dan gesit.

**Topics**
+ [Kasus penggunaan](document-database-use-cases.md)
+ [Memahami dokumen](document-database-documents-understanding.md)
+ [Bekerja dengan dokumen](document-database-working-with-documents.md)

# Kasus penggunaan basis data dokumen
<a name="document-database-use-cases"></a>

Drive kasus penggunaan Anda apakah Anda memerlukan basis data dokumen atau beberapa jenis basis data lain untuk mengelola data Anda. Basis data dokumen berguna untuk beban kerja yang memerlukan skema fleksibel untuk pengembangan yang cepat dan berulang. Berikut ini adalah beberapa contoh kasus penggunaan di mana basis data dokumen dapat memberikan keuntungan yang signifikan:

**Topics**
+ [Profil pengguna](#document-databases-use-cases.user-profiles)
+ [Data besar waktu nyata](#document-databases-use-cases.big-data)
+ [Manajemen konten](#document-databases-use-cases.content-management)

## Profil pengguna
<a name="document-databases-use-cases.user-profiles"></a>

Karena basis data dokumen memiliki skema yang fleksibel, mereka dapat menyimpan dokumen yang memiliki atribut dan nilai data yang berbeda. Basis data dokumen adalah solusi praktis untuk profil online di mana pengguna yang berbeda menyediakan berbagai jenis informasi. Dengan menggunakan basis data dokumen, Anda dapat menyimpan profil setiap pengguna efisien dengan menyimpan hanya atribut yang spesifik untuk setiap pengguna.

Misalkan pengguna memilih untuk menambahkan atau menghapus informasi dari profil mereka. Dalam kasus ini, dokumen mereka dapat dengan mudah diganti dengan versi terbaru yang berisi atribut dan data baru apa pun yang baru ditambahkan atau menghilangkan atribut dan data baru apa pun yang dihilangkan. Basis data dokumen dengan mudah mengelola tingkat individualitas dan fluiditas ini.

## Data besar waktu nyata
<a name="document-databases-use-cases.big-data"></a>

Secara historis, kemampuan untuk mengekstrak informasi dari data operasional terhambat oleh fakta bahwa database operasional dan database analitis dipertahankan di lingkungan yang berbeda—operasional dan masing-masing. business/reporting Mampu mengekstrak informasi operasional secara langsung sangat penting dalam lingkungan bisnis yang sangat kompetitif. Dengan menggunakan basis data dokumen, bisnis dapat menyimpan dan mengelola data operasional dari sumber mana pun dan secara bersamaan mengumpankan data ke mesin BI pilihan untuk analisis. Tidak ada persyaratan untuk memiliki dua lingkungan.

## Manajemen konten
<a name="document-databases-use-cases.content-management"></a>

Untuk mengelola konten secara efektif, Anda harus dapat mengumpulkan dan mengagregasikan konten dari berbagai sumber, dan kemudian mengirimkannya ke pelanggan. Akibat skema fleksibel mereka, basis data dokumen sempurna untuk mengumpulkan dan menyimpan jenis data apa pun. Anda dapat menggunakannya untuk membuat dan menggabungkan jenis konten baru, termasuk konten buatan pengguna, seperti gambar, komentar, dan video.

# Memahami dokumen
<a name="document-database-documents-understanding"></a>

Basis data dokumen digunakan untuk menyimpan data semistruktur sebagai dokumen—alih-alih menormalkan data di beberapa tabel, masing-masing dengan struktur yang unik dan tetap, seperti dalam basis data relasional. Dokumen yang disimpan dalam basis data dokumen menggunakan pasangan nilai kunci nest untuk menyediakan struktur atau skema dokumen. Namun demikian, jenis dokumen yang berbeda dapat disimpan dalam basis data dokumen yang sama, sehingga memenuhi persyaratan untuk memproses data serupa yang dalam format yang berbeda. Sebagai contoh, karena setiap dokumen dijelaskan sendiri, dokumen yang dienkodekan JSON untuk toko online yang dijelaskan dalam topik [Contoh dokumen dalam database dokumen](#document-database-documents) dapat disimpan dalam basis data dokumen yang sama. 

**Topics**
+ [SQL vs. terminologi non-relasional](#document-database-sql-vs-nosql-terms)
+ [Dokumen sederhana](#document-database-documents-simple)
+ [Dokumen yang disematkan](#document-database-documents-embeded)
+ [Contoh dokumen dalam database dokumen](#document-database-documents)
+ [Memahami normalisasi dalam database dokumen](#document-database-normalization)

## SQL vs. terminologi non-relasional
<a name="document-database-sql-vs-nosql-terms"></a>

Tabel berikut ini membandingkan terminologi yang digunakan oleh basis data dokumen (MongoDB) dengan terminologi yang digunakan oleh basis data SQL.


|  SQL  |  MongoDB  | 
| --- | --- | 
|  Tabel  |  Koleksi  | 
|  Baris  |  Dokumen  | 
|  Kolom  |  Bidang  | 
|  Kunci Primer  |  ObjectId  | 
|  Indeks  |  Indeks  | 
|  Lihat  |  Lihat  | 
|  Tabel atau objek nest  |  Dokumen tersemat  | 
|  Array  |  Array  | 

## Dokumen sederhana
<a name="document-database-documents-simple"></a>

Semua dokumen dalam basis data dokumen adalah dijelaskan sendiri. Dokumentasi ini menggunakan dokumen berformat seperti JSON, meskipun Anda dapat menggunakan cara pengenkodean lain.

Dokumen sederhana memiliki satu atau lebih bidang yang semuanya pada tingkat yang sama di dalam dokumen. Dalam contoh berikut ini, bidang `SSN`, `LName`, `FName`, `DOB`, `Street`, `City`, `State-Province`, `PostalCode`, dan`Country` semuanya adalah saudara kandung di dalam dokumen.

```
{
   "SSN": "123-45-6789",
   "LName": "Rivera",
   "FName": "Martha",
   "DOB": "1992-11-16",
   "Street": "125 Main St.",
   "City": "Anytown",
   "State-Province": "WA",
   "PostalCode": "98117",
   "Country": "USA"
}
```

Ketika informasi diatur dalam dokumen sederhana, setiap bidang terkelola secara individual. Untuk mengambil alamat seseorang, Anda harus mengambil `Street`, `City`,`State-Province`, `PostalCode`, dan `Country` sebagai item data individu.

## Dokumen yang disematkan
<a name="document-database-documents-embeded"></a>

Dokumen kompleks mengatur datanya dengan membuat dokumen tersemat di dalam dokumen. Dokumen tersemat membantu mengelola data dalam pengelompokan dan sebagai item data individual, mana yang lebih efisien dalam kasus tertentu. Dengan menggunakan contoh sebelumnya, Anda dapat menyematkan dokumen `Address` dalam dokumen utama. Melakukan hal ini akan menghasilkan struktur dokumen berikut ini:

```
{
   "SSN": "123-45-6789",
   "LName": "Rivera",
   "FName": "Martha",
   "DOB": "1992-11-16",
   "Address": 
   {
       "Street": "125 Main St.",
       "City": "Anytown",
       "State-Province": "WA",
       "PostalCode": "98117",
       "Country": "USA" 
   }
}
```

Anda sekarang dapat mengakses data dalam dokumen sebagai bidang individu ( `"SSN":` ), sebagai dokumen tersemat ( `"Address":` ), atau sebagai anggota dokumen tersemat ( `"Address":{"Street":}` ).

## Contoh dokumen dalam database dokumen
<a name="document-database-documents"></a>

Seperti yang dinyatakan sebelumnya, karena setiap dokumen dalam basis data dokumen adalah dijelaskan sendiri, struktur dokumen di dalam basis data dokumen dapat berbeda satu sama lain. Dua dokumen berikut ini, satu untuk buku dan satu lagi untuk majalah, berbeda secara struktural. Namun keduanya dapat dalam basis data dokumen yang sama.

Berikut ini adalah dokumen buku sampel:

```
{
    "_id" : "9876543210123",
    "Type": "book",
    "ISBN": "987-6-543-21012-3",
    "Author": 
    {
        "LName":"Roe",
        "MI": "T",
        "FName": "Richard" 
    },
    "Title": "Understanding Document Databases"
}
```

Berikut ini adalah dokumen majalah sampel dengan dua artikel:

```
{
    "_id" : "0123456789012",
    "Publication": "Programming Today",
    "Issue": 
    {
        "Volume": "14",
        "Number": "09"
    },
    "Articles" : [ 
        {
            "Title": "Is a Document Database Your Best Solution?",
            "Author": 
            {
                "LName": "Major",
                "FName": "Mary" 
            }
        },
        {
            "Title": "Databases for Online Solutions",
            "Author": 
            {
                "LName": "Stiles",
                "FName": "John" 
            }
        }
    ],
    "Type": "periodical"
}
```

Bandingkan struktur kedua dokumen tersebut. Dengan basis data relasional, Anda perlu memisah tabel “majalah” dan “buku”, atau satu tabel dengan bidang yang tidak terpakai, seperti “Publikasi”, “Terbitan”, “Artikel”, dan “MI”, sebagai nilai `null`. Karena basis data dokumen adalah semistruktur, dengan setiap dokumen mendefinisikan strukturnya sendiri, kedua dokumen tersebut dapat hidup berdampingan dalam basis data dokumen yang sama tanpa bidang `null`. Basis data dokumen baik dalam menangani data yang jarang.

Mengembangkan terhadap basis data dokumen memungkinkan pengembangan yang cepat dan berulang. Hal ini karena Anda dapat mengubah struktur data dokumen secara dinamis, tanpa harus mengubah skema untuk seluruh koleksi. Basis data dokumen sangat cocok untuk pengembangan tangkas dan secara dinamis mengubah lingkungan.

## Memahami normalisasi dalam database dokumen
<a name="document-database-normalization"></a>

Basis data dokumen tidak dinormalisasi; data yang ditemukan dalam satu dokumen dapat diulang dalam dokumen lainnya. Lebih lanjut, beberapa perbedaan data dapat ada di antara dokumen. Sebagai contoh, pertimbangkan skenario di mana Anda melakukan pembelian di toko online dan semua detail pembelian Anda disimpan dalam dokumen tunggal. Dokumen mungkin terlihat seperti dokumen JSON berikut ini:

```
{
    "DateTime": "2018-08-15T12:13:10Z",
    "LName" : "Santos",
    "FName" : "Paul",
    "Cart" : [ 
        {
            "ItemId" : "9876543210123",
            "Description" : "Understanding Document Databases",
            "Price" : "29.95"
        },
        {
            "ItemId" : "0123456789012",
            "Description" : "Programming Today",
            "Issue": {
                "Volume": "14",
                "Number": "09"
            },
            "Price" : "8.95"
        },
        {
            "ItemId": "234567890-K",
            "Description": "Gel Pen (black)",
            "Price": "2.49" 
        }
    ],
    "PaymentMethod" : 
    {
        "Issuer" : "MasterCard",
        "Number" : "1234-5678-9012-3456" 
    },
    "ShopperId" : "1234567890" 
}
```

Semua informasi ini disimpan sebagai dokumen dalam koleksi transaksi. Kemudian, Anda menyadari bahwa Anda lupa membeli satu item. Sehingga Anda kembali masuk ke toko yang sama dan melakukan pembelian lainnya, yang juga disimpan sebagai dokumen lainnya dalam koleksi transaksi.

```
{
    "DateTime": "2018-08-15T14:49:00Z",
    "LName" : "Santos",
    "FName" : "Paul",
    "Cart" : [ 
        {
            "ItemId" : "2109876543210",
            "Description" : "Document Databases for Fun and Profit",
            "Price" : "45.95"
        } 
    ],
    "PaymentMethod" : 
    {
        "Issuer" : "Visa",
        "Number" : "0987-6543-2109-8765" 
    },
    "ShopperId" : "1234567890" 
}
```

Perhatikan redundansi antara kedua dokumen tersebut—nama dan ID pembelanja Anda (dan, jika Anda menggunakan kartu kredit yang sama, informasi kartu kredit Anda). Tapi hal ini tidak apa-apa karena penyimpanan murah, dan setiap dokumen benar-benar mencatat transaksi tunggal yang dapat diambil dengan cepat dengan kueri nilai kunci sederhana tanpa harus bergabung.

Terdapat juga perbedaan yang jelas antara kedua dokumen—informasi kartu kredit Anda. Ini hanya perbedaan yang jelas karena kemungkinan Anda akan menggunakan kartu kredit yang berbeda untuk setiap pembelian. Setiap dokumen akurat untuk transaksi yang didokumentasikan.

# Bekerja dengan dokumen
<a name="document-database-working-with-documents"></a>

Sebagai basis data dokumen, Amazon DocumentDB membuatnya mudah untuk menyimpan, membuat kueri, dan membuat indeks data JSON. Di Amazon DocumentDB, koleksi analog dengan tabel dalam basis data relasional, kecuali tidak ada skema tunggal ditegakkan pada semua dokumen. Koleksi memungkinkan Anda mengelompokkan dokumen yang serupa bersama-sama sembari menjaga mereka semua dalam basis data yang sama, tanpa mengharuskan bahwa mereka identik dalam struktur.

Dengan menggunakan contoh dokumen dari bagian sebelumnya, kemungkinan bahwa Anda akan memiliki koleksi untuk `reading_material` dan `office_supplies`. Merupakan tanggung jawab perangkat lunak Anda untuk menegakkan koleksi yang memiliki dokumen tersebut.

Contoh berikut ini menggunakan MongoDB API untuk menunjukkan bagaimana untuk menambahkan, kueri, pembaruan, dan menghapus dokumen.

**Topics**
+ [Menambahkan dokumen](#document-database-adding-documents)
+ [Menanyakan dokumen](#document-database-queries)
+ [Memperbarui dokumen](#document-database-updating)
+ [Menghapus dokumen](#document-database-deleting)

## Menambahkan dokumen
<a name="document-database-adding-documents"></a>

Di Amazon DocumentDB, basis data dibuat saat pertama kali Anda menambahkan dokumen ke koleksi. Dalam contoh ini, Anda membuat koleksi yang diberi nama `example` di basis data `test`, yang merupakan basis data default ketika Anda terhubung ke klaster. Karena koleksi secara implisit dibuat ketika dokumen pertama dimasukkan, tidak ada pemeriksaan kesalahan nama koleksi. Oleh karena itu, salah ketik dalam nama koleksi, seperti `eexample` alih-alih `example`, akan membuat dan menambahkan dokumen ke koleksi `eexample` alih-alih ke koleksi yang dimaksudkan. Pemeriksaan kesalahan harus ditangani oleh aplikasi Anda.

Contoh berikut ini menggunakan API MongoDB untuk menambahkan dokumen.

**Topics**
+ [Menambahkan satu dokumen](#document-database-adding-documents-single)
+ [Menambahkan beberapa dokumen](#document-database-adding-documents-multiple)

### Menambahkan satu dokumen
<a name="document-database-adding-documents-single"></a>

Untuk menambahkan dokumen tunggal ke koleksi, gunakan operasi `insertOne( {} )` dengan dokumen yang ingin Anda tambahkan ke koleksi.

```
db.example.insertOne(
    {
        "Item": "Ruler",
        "Colors": ["Red","Green","Blue","Clear","Yellow"],
        "Inventory": {
            "OnHand": 47,
            "MinOnHand": 40
        },
        "UnitPrice": 0.89
    }
)
```

Keluaran dari operasi ini terlihat seperti berikut ini (format JSON).

```
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5bedafbcf65ff161707de24f")
}
```

### Menambahkan beberapa dokumen
<a name="document-database-adding-documents-multiple"></a>

Untuk menambahkan beberapa dokumen ke koleksi, gunakan operasi `insertMany( [{},...,{}] )` dengan daftar dokumen yang ingin Anda tambahkan ke koleksi. Meskipun dokumen dalam daftar khusus ini memiliki skema yang berbeda, mereka semua dapat ditambahkan ke koleksi yang sama.

```
db.example.insertMany(
    [
        {
            "Item": "Pen",
            "Colors": ["Red","Green","Blue","Black"],
            "Inventory": {
                "OnHand": 244,
                "MinOnHand": 72 
            }
        },
        {
            "Item": "Poster Paint",
            "Colors": ["Red","Green","Blue","Black","White"],
            "Inventory": {
                "OnHand": 47,
                "MinOnHand": 50 
            }
        },
        {
            "Item": "Spray Paint",
            "Colors": ["Black","Red","Green","Blue"],
            "Inventory": {
                "OnHand": 47,
                "MinOnHand": 50,
                "OrderQnty": 36
            }
        }    
    ]
)
```

Keluaran dari operasi ini terlihat seperti berikut ini (format JSON).

```
{
    "acknowledged" : true,
    "insertedIds" : [
            ObjectId("5bedb07941ca8d9198f5934c"),
            ObjectId("5bedb07941ca8d9198f5934d"),
            ObjectId("5bedb07941ca8d9198f5934e")
    ]
}
```

## Menanyakan dokumen
<a name="document-database-queries"></a>

Terkadang, Anda mungkin perlu mencari inventaris toko online Anda sehingga pelanggan dapat melihat dan membeli apa yang Anda jual. Melakukan kueri sebuah koleksi relatif mudah, apakah Anda ingin semua dokumen dalam koleksi atau hanya dokumen yang memenuhi kriteria tertentu.

Untuk melakukan kueri dokumen, gunakan operasi `find()`. Perintah `find()` memiliki parameter dokumen tunggal yang mendefinisikan kriteria yang akan digunakan dalam memilih dokumen yang akan dikembalikan. Output dari `find()` adalah dokumen yang diformat sebagai satu baris teks tanpa jeda baris. Untuk memformat dokumen output agar lebih mudah dibaca, gunakan `find().pretty()`. Semua contoh dalam topik ini menggunakan `.pretty()` untuk memformat keluaran.

Gunakan empat dokumen yang Anda masukkan ke dalam koleksi `example` dalam dua latihan sebelumnya — `insertOne()` dan `insertMany()`.

**Topics**
+ [Mengambil semua dokumen dalam koleksi](#document-database-queries-all-documents)
+ [Mengambil dokumen yang cocok dengan nilai bidang](#document-database-queries-match-criteria)
+ [Mengambil dokumen yang cocok dengan dokumen yang disematkan](#document-database-queries-entire-embedded-document)
+ [Mengambil dokumen yang cocok dengan nilai bidang dalam dokumen yang disematkan](#document-database-queries-embeded-document-field)
+ [Mengambil dokumen yang cocok dengan array](#document-database-queries-array-match)
+ [Mengambil dokumen yang cocok dengan nilai dalam array](#document-database-queries-array-value-match)
+ [Mengambil dokumen menggunakan operator](#document-database-query-operators)

### Mengambil semua dokumen dalam koleksi
<a name="document-database-queries-all-documents"></a>

Untuk mengambil semua dokumen dalam koleksi Anda, gunakan operasi `find()` dengan dokumen kueri yang kosong.

Kueri berikut mengembalikan semua dokumen di dalam koleksi `example`.

```
db.example.find( {} ).pretty()
```

### Mengambil dokumen yang cocok dengan nilai bidang
<a name="document-database-queries-match-criteria"></a>

Untuk mengambil semua dokumen yang cocok dengan bidang dan nilai, gunakan operasi `find()` dengan dokumen kueri yang mengidentifikasi bidang dan nilai untuk mencocokkan.

Menggunakan dokumen sebelumnya, kueri ini mengembalikan semua dokumen di mana bidang "Item" sama dengan "Pena".

```
db.example.find( { "Item": "Pen" } ).pretty()
```

### Mengambil dokumen yang cocok dengan dokumen yang disematkan
<a name="document-database-queries-entire-embedded-document"></a>

Untuk menemukan semua dokumen yang cocok dengan dokumen tersemat, gunakan operasi `find()` dengan dokumen kueri yang menentukan nama dokumen tersemat dan semua bidang dan nilai untuk dokumen tersemat.

Saat mencocokkan dokumen yang ditanamkan, dokumen yang ditanamkan tersebut harus memiliki nama yang sama seperti dalam kueri. Selain itu, bidang dan nilai dalam dokumen yang ditanamkan harus cocok dengan kueri.

Kueri berikut hanya mengembalikan dokumen "Cat Poster". Ini karena "Pena" memiliki nilai yang berbeda untuk "`OnHand`" dan "`MinOnHand`", dan "Cat Semprot" memiliki satu bidang (`OrderQnty`) lebih banyak daripada dokumen kueri.

```
db.example.find({"Inventory": {
    "OnHand": 47,
    "MinOnHand": 50 } } ).pretty()
```

### Mengambil dokumen yang cocok dengan nilai bidang dalam dokumen yang disematkan
<a name="document-database-queries-embeded-document-field"></a>

Untuk menemukan semua dokumen yang cocok dengan dokumen tersemat, gunakan operasi `find()` dengan dokumen kueri yang menentukan nama dokumen tersemat dan semua bidang dan nilai untuk dokumen tersemat.

Mengingat dokumen sebelumnya, kueri berikut menggunakan "notasi titik" untuk menentukan dokumen yang ditanamkan dan bidang yang diminati. Setiap dokumen yang cocok dengan ini dikembalikan, terlepas dari apa bidang lain mungkin hadir dalam dokumen tertanam. Kueri mengembalikan "Cat Poster" dan "Cat Semprot" karena keduanya cocok dengan bidang dan nilai yang ditentukan.

```
db.example.find({"Inventory.OnHand": 47, "Inventory.MinOnHand": 50 }).pretty()
```

### Mengambil dokumen yang cocok dengan array
<a name="document-database-queries-array-match"></a>

Untuk menemukan semua dokumen yang cocok dengan susunan, gunakan operasi `find()` dengan nama susunan yang menjadi perhatian Anda dan semua nilai dalam susunan tersebut. Kueri mengembalikan semua dokumen yang memiliki array dengan nama itu di mana nilai arraynya identik dengan dan dalam urutan yang sama seperti dalam kueri.

Kueri berikut hanya mengembalikan "Pena" karena "Cat Poster" memiliki warna tambahan (Putih), dan "Cat Semprot" memiliki warna dalam urutan yang berbeda.

```
db.example.find( { "Colors": ["Red","Green","Blue","Black"] } ).pretty() 
```

### Mengambil dokumen yang cocok dengan nilai dalam array
<a name="document-database-queries-array-value-match"></a>

Untuk menemukan semua dokumen yang memiliki nilai susunan tertentu, gunakan operasi `find()` dengan nama susunan dan nilai yang menjadi perhatian Anda.

```
db.example.find( { "Colors": "Red" } ).pretty() 
```

Operasi sebelumnya mengembalikan ketiga dokumen karena masing-masing memiliki array bernama `Colors` dan nilai "`Red`" di suatu tempat dalam array. Jika Anda menentukan nilai "`White`", kueri hanya akan mengembalikan "Cat Poster."

### Mengambil dokumen menggunakan operator
<a name="document-database-query-operators"></a>

Kueri berikut ini mengembalikan semua dokumen di mana nilai "`Inventory.OnHand`" adalah kurang dari 50.

```
db.example.find(
        { "Inventory.OnHand": { $lt: 50 } } )
```

Untuk daftar operator kueri yang didukung, lihat [Operator kueri dan proyeksi](mongo-apis.md#mongo-apis-query). 

## Memperbarui dokumen
<a name="document-database-updating"></a>

Biasanya, dokumen Anda tidak statis dan diperbarui sebagai bagian dari alur kerja aplikasi Anda. Contoh berikut ini menunjukkan beberapa cara yang dapat lakukan Anda untuk memperbarui dokumen.

Untuk memperbarui dokumen yang ada, gunakan operasi `update()`. Operasi `update()` memiliki dua parameter dokumen. Dokumen pertama mengidentifikasi dokumen atau dokumen-dokumen mana yang akan diperbarui. Dokumen kedua menentukan pembaruan yang akan dilakukan.

Ketika Anda memperbarui bidang yang ada — apakah bidang itu adalah bidang sederhana, susunan, atau dokumen tersemat -— Anda harus menentukan nama bidang dan nilainya. Pada akhir operasi, seolah-olah bidang dalam dokumen lama telah digantikan oleh bidang dan nilai baru.

**Topics**
+ [Memperbarui nilai bidang yang ada](#document-database-updating-existing-fields)
+ [Menambahkan bidang baru](#document-database-updating-adding-field)
+ [Mengganti dokumen yang disematkan](#document-database-replacing-embedded-document)
+ [Memasukkan bidang baru ke dalam dokumen yang disematkan](#document-database-updating-adding-field-embedded)
+ [Menghapus bidang dari dokumen](#document-database-remove-field)
+ [Menghapus bidang dari beberapa dokumen](#document-database-remove-field-all)

### Memperbarui nilai bidang yang ada
<a name="document-database-updating-existing-fields"></a>

Gunakan empat dokumen berikut ini yang Anda tambahkan sebelumnya untuk operasi pembaruan berikut ini.

```
{
    "Item": "Ruler",
    "Colors": ["Red","Green","Blue","Clear","Yellow"],
    "Inventory": {
        "OnHand": 47,
        "MinOnHand": 40
    },
    "UnitPrice": 0.89
},
{
    "Item": "Pen",
    "Colors": ["Red","Green","Blue","Black"],
    "Inventory": {
        "OnHand": 244,
        "MinOnHand": 72 
    }
},
{
    "Item": "Poster Paint",
    "Colors": ["Red","Green","Blue","Black","White"],
    "Inventory": {
        "OnHand": 47,
        "MinOnHand": 50 
    }
},
{
    "Item": "Spray Paint",
    "Colors": ["Black","Red","Green","Blue"],
    "Inventory": {
        "OnHand": 47,
        "MinOnHand": 50,
        "OrderQnty": 36
    }
}
```

**Untuk memperbarui bidang sederhana**  
Untuk memperbarui bidang sederhana, gunakan `update()` dengan `$set` untuk menentukan nama bidang dan nilai baru. Contoh berikut ini mengubah `Item` dari “Pen” ke “Gel Pen”.

```
db.example.update(
    { "Item" : "Pen" },
    { $set: { "Item": "Gel Pen" } }
)
```

Hasil dari operasi ini terlihat seperti berikut ini.

```
{
    "Item": "Gel Pen",
    "Colors": ["Red","Green","Blue","Black"],
    "Inventory": {
        "OnHand": 244,
        "MinOnHand": 72 
    }
}
```

**Untuk memperbarui susunan**  
Contoh berikut ini menggantikan susunan warna yang ada dengan susunan baru yang mencakup `Orange` dan menghapus `White` dari daftar warna. Daftar warna baru adalah dalam urutan yang ditentukan dalam operasi `update()`.

```
db.example.update(
    { "Item" : "Poster Paint" },
    { $set: { "Colors": ["Red","Green","Blue","Orange","Black"] } }
)
```

Hasil dari operasi ini terlihat seperti berikut ini.

```
{
    "Item": "Poster Paint",
    "Colors": ["Red","Green","Blue","Orange","Black"],
    "Inventory": {
        "OnHand": 47,
        "MinOnHand": 50 
    }
}
```

### Menambahkan bidang baru
<a name="document-database-updating-adding-field"></a>

Untuk mengubah dokumen dengan menambahkan satu atau lebih bidang baru, gunakan operasi `update()` dengan dokumen kueri yang mengidentifikasi dokumen yang akan dimasukkan dan bidang dan nilai baru yang akan dimasukkan menggunakan operator `$set`.

Contoh berikut ini menambahkan bidang `UnitPrice` dengan nilai `3.99` ke dokumen Spray Paints. Perhatikan bahwa nilai `3.99` adalah numerik dan bukan string.

```
db.example.update(
    { "Item": "Spray Paint" },
    { $set: { "UnitPrice": 3.99 } } 
)
```

Hasil dari operasi ini terlihat seperti berikut ini (format JSON).

```
{
    "Item": "Spray Paint",
    "Colors": ["Black","Red","Green","Blue"],
    "Inventory": {
        "OnHand": 47,
        "MinOnHand": 50,
        "OrderQnty": 36
    },
    "UnitPrice": 3.99
}
```

### Mengganti dokumen yang disematkan
<a name="document-database-replacing-embedded-document"></a>

Untuk mengubah dokumen dengan mengganti dokumen tersemat, gunakan operasi `update()` dengan dokumen yang mengidentifikasi dokumen tersemat dan bidang dan nilai barunya menggunakan operator `$set`.

Mengingat dokumen berikut.

```
db.example.insert({
    "DocName": "Document 1",
    "Date": {
        "Year": 1987,
        "Month": 4,
        "Day": 18
    }
})
```

**Untuk mengganti dokumen tersemat**  
Contoh berikut ini menggantikan dokumen Tanggal saat ini dengan yang dokumen baru yang hanya memiliki bidang `Month` dan `Day`; `Year` telah dihilangkan.

```
db.example.update(
    { "DocName" : "Document 1" },
    { $set: { "Date": { "Month": 4, "Day": 18 } } }
)
```

Hasil dari operasi ini terlihat seperti berikut ini.

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18
    }
}
```

### Memasukkan bidang baru ke dalam dokumen yang disematkan
<a name="document-database-updating-adding-field-embedded"></a>

**Untuk menambahkan bidang ke dokumen tersemat**  
Untuk mengubah dokumen dengan menambahkan satu atau lebih bidang baru ke dokumen tersemat, gunakan operasi `update()` dengan dokumen yang mengidentifikasi dokumen tersemat dan “notasi dot” untuk menentukan dokumen tersemat dan bidang dan nilai baru yang akan dimasukkan menggunakan operator `$set`.

Mengingat dokumen berikut ini, kode berikut ini menggunakan “notasi dot” untuk memasukkan bidang `Year` dan `DoW` ke dokumen `Date`yang disematkan, dan `Words` ke dalam dokumen induk.

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18
    }
}
```

```
db.example.update(
    { "DocName" : "Document 1" },
    { $set: { "Date.Year": 1987, 
              "Date.DoW": "Saturday",
              "Words": 2482 } }
)
```

Hasil dari operasi ini terlihat seperti berikut ini.

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    },
    "Words": 2482
}
```

### Menghapus bidang dari dokumen
<a name="document-database-remove-field"></a>

Untuk mengubah dokumen dengan menghapus bidang dari dokumen, gunakan operasi `update()` dengan dokumen kueri yang mengidentifikasi dokumen yang akan dihapus bidangnya, dan operator `$unset` untuk menentukan bidang yang akan dihapus.

Contoh berikut ini akan menghapus bidang `Words`dari dokumen sebelumnya.

```
db.example.update(
    { "DocName" : "Document 1" },
    { $unset: { Words:1 } }
)
```

Hasil dari operasi ini terlihat seperti berikut ini.

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    }
}
```

### Menghapus bidang dari beberapa dokumen
<a name="document-database-remove-field-all"></a>

Untuk mengubah dokumen dengan menghapus bidang dari beberapa dokumen, gunakan operasi `update()` dengan operator `$unset` dan `multi` diatur ke `true`.

Contoh berikut ini akan menghapus bidang `Inventory` dari semua dokumen dalam koleksi contoh. Jika dokumen tidak memiliki bidang `Inventory`, tidak ada tindakan yang dilakukan pada dokumen tersebut. Jika `multi: true` dihilangkan, tindakan dilakukan hanya pada dokumen pertama yang memenuhi kriteria.

```
db.example.update(
    {},
    { $unset: { Inventory:1 } },
    { multi: true }
)
```

## Menghapus dokumen
<a name="document-database-deleting"></a>

Untuk menghapus dokumen dari basis data Anda, gunakan operasi `remove()`, yang menentukan dokumen yang akan dihapus. Kode berikut ini menghapus “Gel Pen” dari koleksi `example` Anda.

```
db.example.remove( { "Item": "Gel Pen" } )
```

Untuk menghapus semua dokumen dari database Anda, gunakan `remove()` operasi dengan kueri kosong.

```
db.example.remove( { } )
```