Skip to content

Commit 483be06

Browse files
authored
DOCSP-44681: Client bulk write (#984)
* DOCSP-44681: Client bulk write * more content * fixes * code format * edit overview * fix * RM feedback * fixes * DJ feedback
1 parent 630ebd2 commit 483be06

File tree

2 files changed

+788
-207
lines changed

2 files changed

+788
-207
lines changed

source/code-snippets/crud/bulk.js

Lines changed: 222 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,117 +1,249 @@
1-
const { MongoClient, ObjectId } = require('mongodb');
1+
const {
2+
MongoClient,
3+
ObjectId
4+
} = require('mongodb');
25

36
const uri = '<connection string>'; // Add your MongoDB connection string here
47

58
(async () => {
6-
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
9+
const client = new MongoClient(uri);
710

811
try {
912
await client.connect();
10-
13+
1114
const database = client.db('sample_mflix');
1215
const movies = database.collection('movies');
1316

14-
// Clean up collection
15-
await movies.deleteMany({});
16-
17-
// begin-sample-data
18-
// const movies = database.collection('movies');
19-
20-
const docs = [
21-
{ title: "Inception", year: 2010, rated: "PG-13", released: "2010-07-16" },
22-
{ title: "Interstellar", year: 2014, rated: "PG-13", released: "2014-11-07" },
23-
{ title: "The Dark Knight", year: 2008, rated: "PG-13", released: "2008-07-18" },
24-
{ title: "Tenet", year: 2020, rated: "PG-13", released: "2020-09-03"}
25-
];
26-
// end-sample-data
27-
28-
// begin-insert
29-
const bulkOps = [
30-
{ insertOne: { document: { title: "Inception", year: 2010, rated: "PG-13", released: "2010-07-16" } } },
31-
{ insertOne: { document: { title: "Interstellar", year: 2014, rated: "PG-13", released: "2014-11-07" } } },
32-
{ insertOne: { document: { title: "The Dark Knight", year: 2008, rated: "PG-13", released: "2008-07-18" } } },
33-
{ insertOne: { document: { title: "Tenet", year: 2020, rated: "PG-13", released: "2020-09-03" } } }
34-
];
35-
36-
await movies.bulkWrite(bulkOps);
37-
// end-insert
38-
39-
await movies.insertMany(docs);
40-
41-
// Inserting additional movies
42-
const additionalMovies = [
43-
{ title: "Dunkirk", year: 2017, rated: "PG-13", released: "2017-07-21" },
44-
{ title: "Memento", year: 2000, rated: "R", released: "2000-09-05" }
45-
];
46-
await movies.insertMany(additionalMovies);
47-
48-
49-
// begin-replace
50-
const replaceOperations = [
51-
{
52-
replaceOne: {
53-
filter: { title: "The Dark Knight" },
54-
replacement: { title: "The Dark Knight Rises", year: 2012, rating: "PG-13" },
55-
upsert: false
17+
// begin-insert-coll
18+
const insertModels = [{
19+
insertOne: {
20+
document: {
21+
title: "The Favourite",
22+
year: 2018,
23+
rated: "R",
24+
released: "2018-12-21"
5625
}
57-
},
58-
{
59-
replaceOne: {
60-
filter: { title: "Inception" },
61-
replacement: { title: "Inception Reloaded", year: 2010, rating: "PG-13" },
62-
upsert: false
26+
}
27+
}, {
28+
insertOne: {
29+
document: {
30+
title: "I, Tonya",
31+
year: 2017,
32+
rated: "R",
33+
released: "2017-12-08"
6334
}
6435
}
65-
];
36+
}];
37+
38+
const insertResult = await movies.bulkWrite(insertModels);
39+
console.log(`Inserted documents: ${insertResult.insertedCount}`);
40+
// end-insert-coll
41+
42+
// begin-insert-client
43+
const clientInserts = [{
44+
namespace: "sample_mflix.movies",
45+
name: "insertOne",
46+
document: {
47+
title: "The Favourite",
48+
year: 2018,
49+
rated: "R",
50+
released: "2018-12-21"
51+
}
52+
}, {
53+
namespace: "sample_mflix.movies",
54+
name: "insertOne",
55+
document: {
56+
title: "I, Tonya",
57+
year: 2017,
58+
rated: "R",
59+
released: "2017-12-08"
60+
}
61+
}, {
62+
namespace: "sample_mflix.users",
63+
name: "insertOne",
64+
document: {
65+
name: "Brian Schwartz",
66+
67+
}
68+
}];
6669

67-
const replace_result = await movies.bulkWrite(replaceOperations);
68-
// end-replace
70+
const clientInsertRes = await client.bulkWrite(clientInserts);
71+
console.log(`Inserted documents: ${clientInsertRes.insertedCount}`);
72+
// end-insert-client
6973

74+
await movies.insertMany(docs);
7075

71-
// begin-update
72-
const updateOperations = [
73-
{
74-
updateOne: {
75-
filter: { title: "Interstellar" },
76-
update: { $set: { title: "Interstellar Updated", genre: "Sci-Fi Adventure" } },
77-
upsert: true
78-
}
76+
// begin-replace-coll
77+
const replaceOperations = [{
78+
replaceOne: {
79+
filter: {
80+
title: "The Dark Knight"
81+
},
82+
replacement: {
83+
title: "The Dark Knight Rises",
84+
year: 2012,
85+
rating: "PG-13"
86+
},
87+
upsert: false
88+
}
89+
}, {
90+
replaceOne: {
91+
filter: {
92+
title: "Inception"
93+
},
94+
replacement: {
95+
title: "Inception Reloaded",
96+
year: 2010,
97+
rating: "PG-13"
98+
},
99+
upsert: false
100+
}
101+
}];
102+
103+
const replaceResult = await movies.bulkWrite(replaceOperations);
104+
console.log(`Modified documents: ${replaceResult.modifiedCount}`);
105+
// end-replace-coll
106+
107+
// begin-replace-client
108+
const clientReplacements = [{
109+
namespace: "sample_mflix.movies",
110+
name: "replaceOne",
111+
filter: {
112+
title: "The Dark Knight"
113+
},
114+
replacement: {
115+
title: "The Dark Knight Rises",
116+
year: 2012,
117+
rating: "PG-13"
118+
}
119+
}, {
120+
namespace: "sample_mflix.movies",
121+
name: "replaceOne",
122+
filter: {
123+
title: "Inception"
79124
},
80-
{
81-
updateMany: {
82-
filter: { rated: "PG-13" },
83-
update: { $set: { rated: "PG-13 Updated", genre: "Updated Genre" } }
125+
replacement: {
126+
title: "Inception Reloaded",
127+
year: 2010,
128+
rating: "PG-13"
129+
}
130+
}, {
131+
namespace: "sample_mflix.users",
132+
name: "replaceOne",
133+
filter: {
134+
name: "April Cole"
135+
},
136+
replacement: {
137+
name: "April Franklin",
138+
139+
}
140+
}];
141+
142+
const clientReplaceRes = await client.bulkWrite(clientReplacements);
143+
console.log(`Modified documents: ${clientReplaceRes.modifiedCount}`);
144+
// end-replace-client
145+
146+
// begin-update-coll
147+
const updateOperations = [{
148+
updateOne: {
149+
filter: {
150+
title: "Interstellar"
151+
},
152+
update: {
153+
$set: {
154+
title: "Interstellar Updated",
155+
genre: "Sci-Fi Adventure"
156+
}
157+
},
158+
upsert: true
159+
}
160+
}, {
161+
updateMany: {
162+
filter: {
163+
rated: "PG-13"
164+
},
165+
update: {
166+
$set: {
167+
rated: "PG-13 Updated",
168+
genre: "Updated Genre"
169+
}
84170
}
85171
}
86-
];
87-
88-
const update_result = await movies.bulkWrite(updateOperations);
89-
90-
console.log(`Matched documents: ${result3.matchedCount}`);
91-
console.log(`Modified documents: ${result3.modifiedCount}`);
92-
// end-update
93-
94-
95-
// begin-delete
96-
const deleteOperations = [
97-
{
98-
deleteOne: {
99-
filter: { title: "Dunkirk" }
172+
}];
173+
174+
const updateResult = await movies.bulkWrite(updateOperations);
175+
console.log(`Modified documents: ${updateResult.modifiedCount}`);
176+
// end-update-coll
177+
178+
// begin-update-client
179+
const clientUpdates = [{
180+
namespace: "sample_mflix.movies",
181+
name: "updateMany",
182+
filter: {
183+
rated: "PG-13"
184+
},
185+
update: {
186+
$set: {
187+
rated: "PG-13 Updated",
188+
genre: "Updated Genre"
100189
}
101190
},
102-
{
103-
deleteMany: {
104-
filter: { rated: "R" }
191+
upsert: false
192+
}, {
193+
namespace: "sample_mflix.users",
194+
name: "updateOne",
195+
filter: {
196+
name: "Jon Snow"
197+
},
198+
update: {
199+
$set: {
200+
name: "Aegon Targaryen",
201+
202+
}
203+
},
204+
upsert: false
205+
}];
206+
const clientUpdateRes = await client.bulkWrite(clientUpdates);
207+
console.log(`Modified documents: ${clientUpdateRes.modifiedCount}`);
208+
// end-update-client
209+
210+
// begin-delete-coll
211+
const deleteOperations = [{
212+
deleteOne: {
213+
filter: {
214+
title: "Dunkirk"
105215
}
106216
}
107-
];
108-
109-
110-
const delete_result = await movies.bulkWrite(deleteOperations);
111-
112-
console.log(`Deleted documents: ${result4.deletedCount}`);
113-
// end-delete
217+
}, {
218+
deleteMany: {
219+
filter: {
220+
rated: "R"
221+
}
222+
}
223+
}];
224+
225+
const deleteResult = await movies.bulkWrite(deleteOperations);
226+
console.log(`Deleted documents: ${deleteResult.deletedCount}`);
227+
// end-delete-coll
228+
229+
// begin-delete-client
230+
const clientDeletes = [{
231+
namespace: "sample_mflix.movies",
232+
name: "deleteMany",
233+
filter: {
234+
rated: "R"
235+
}
236+
}, {
237+
namespace: "sample_mflix.users",
238+
name: "deleteOne",
239+
filter: {
240+
241+
}
242+
}];
114243

244+
const clientDeleteRes = await client.bulkWrite(clientDeletes);
245+
console.log(`Deleted documents: ${clientDeleteRes.deletedCount}`);
246+
// end-delete-client
115247

116248
console.log("Operations completed successfully.");
117249
} finally {

0 commit comments

Comments
 (0)