Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Node.js ドライバー
/ /

ドキュメントの置換

このガイドでは、 Node.jsドライバーを使用してMongoDBコレクション内のドキュメントに対して置換操作を実行する方法を学習できます。置換操作は更新操作とは異なります。アップデート操作、ターゲットドキュメント内の指定されたフィールドのみが変更されます。置換操作、ターゲットドキュメント内のすべてのフィールドが削除され、新しいフィールドに置き換えられます。

置換操作を実行するには、置換操作で使用するフィールドと値で構成される置換ドキュメントを作成します。 Replacement documents use the following format:

{
<field>: {
<value>
},
<field>: {
...
}
}

置換ドキュメントとは、クエリフィルターに一致する既存のドキュメントを置き換えるドキュメントです。

任意の options パラメータを使用して、upsert などのさらに多くのオプションを指定できます。upsert オプションフィールドを true に設定すると、クエリに一致するドキュメントがない場合、このメソッドは新しいドキュメントを挿入します。

replaceOne()メソッドは、実行中にエラーが発生した場合に例外をスローします。 たとえば、一意なインデックスのルールに違反する値を指定すると、 replaceOne()duplicate key errorをスローします。

注意

アプリケーションで更新後にドキュメントが必要な場合は、 コレクション.findOneAndReplace() を使用しますメソッド。これは replaceOne() と同様のインターフェースを持つものです。元の一致したドキュメントまたは置換ドキュメント のいずれかを返すように findOneAndReplace() を構成します。

販売商品、その価格、利用可能な数量を説明するフィールドを持つmyDB.itemsコレクション内のドキュメントを例にとります。

{
_id: 501,
item: "3-wick beeswax candle",
price: 18.99,
quantity: 10,
}

このドキュメントを、完全に異なるアイテムの説明を含むドキュメントに置き換えたいとします。 置き換え操作は、次のようになります。

const myDB = client.db("myDB");
const myColl = myDB.collection("items");
const filter = { _id: 501 };
// replace the matched document with the replacement document
const replacementDocument = {
item: "Vintage silver flatware set",
price: 79.15,
quantity: 1,
};
const result = await myColl.replaceOne(filter, replacementDocument);

置換されたドキュメントには、次のように、置換ドキュメントの内容と不変の_idフィールドが含まれます。

{
_id: 501,
item: "Vintage silver flatware set",
price: 79.15,
quantity: 1,
}

置き換え操作がコレクション内のいずれかのドキュメントと一致しない場合は、変更は行われません。置換操作は、置換の実行を試みる アップサートを実行するように構成できますが、一致するドキュメントがない場合は、指定されたフィールドと値を持つ新しいドキュメントが挿入されます。

ドキュメントの_idフィールドを変更したり、 一意のインデックス制約に違反する値にフィールドを変更したりすることはできません。 一意なインデックス の詳細については、MongoDB Server マニュアルを参照してください。

注意

セットアップ例

この例では、接続 URI を使用してMongoDBのインスタンスに接続します。MongoDBインスタンスへの接続の詳細については、 MongoDBへの接続 ガイドを参照してください。この例では、Atlasサンプルデータセットに含まれる sample_mflixデータベースの moviesコレクションも使用します。Atlas を使い始める」ガイドに従って、 MongoDB Atlasの無料階層のデータベースにロードできます。

次のコードは、1 つの置き換え操作を実行する完全なスタンドアロンファイルです。

1import { MongoClient } from "mongodb";
2
3// Replace the uri string with your MongoDB deployment's connection string.
4const uri = "<connection string uri>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10
11 // Get the database and collection on which to run the operation
12 const database = client.db("sample_mflix");
13 const movies = database.collection("movies");
14
15 // Create a query for documents where the title contains "The Cat from"
16 const query = { title: { $regex: "The Cat from" } };
17
18 // Create the document that will replace the existing document
19 const replacement = {
20 title: `The Cat from Sector ${Math.floor(Math.random() * 1000) + 1}`,
21 };
22
23 // Execute the replace operation
24 const result = await movies.replaceOne(query, replacement);
25
26 // Print the result
27 console.log(`Modified ${result.modifiedCount} document(s)`);
28 } finally {
29 await client.close();
30 }
31}
32run().catch(console.dir);
1import { MongoClient } from "mongodb";
2
3// Replace the uri string with your MongoDB deployment's connection string.
4const uri = "<connection string uri>";
5
6const client = new MongoClient(uri);
7
8interface Movie {
9 title: string;
10}
11
12async function run() {
13 try {
14 const database = client.db("sample_mflix");
15 const movies = database.collection<Movie>("movies");
16
17 const result = await movies.replaceOne(
18 { title: { $regex: "The Cat from" } },
19 {
20 title: `The Cat from Sector ${Math.floor(Math.random() * 1000) + 1}`,
21 }
22 );
23 console.log(`Modified ${result.modifiedCount} document(s)`);
24 } finally {
25 await client.close();
26 }
27}
28run().catch(console.dir);

上記の例を実行すると、次の出力が生成されます。

Modified 1 document(s)

このガイドで説明した型やメソッドの詳細については、次の API ドキュメントを参照してください。

戻る

ドキュメントの変更

項目一覧