Skip to content

Commit 62fb1d3

Browse files
committed
DOCSP-44681: Client bulk write (#984)
* DOCSP-44681: Client bulk write * more content * fixes * code format * edit overview * fix * RM feedback * fixes * DJ feedback (cherry picked from commit 483be06)
1 parent bfa8347 commit 62fb1d3

File tree

2 files changed

+1106
-0
lines changed

2 files changed

+1106
-0
lines changed

source/code-snippets/crud/bulk.js

Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
const {
2+
MongoClient,
3+
ObjectId
4+
} = require('mongodb');
5+
6+
const uri = '<connection string>'; // Add your MongoDB connection string here
7+
8+
(async () => {
9+
const client = new MongoClient(uri);
10+
11+
try {
12+
await client.connect();
13+
14+
const database = client.db('sample_mflix');
15+
const movies = database.collection('movies');
16+
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"
25+
}
26+
}
27+
}, {
28+
insertOne: {
29+
document: {
30+
title: "I, Tonya",
31+
year: 2017,
32+
rated: "R",
33+
released: "2017-12-08"
34+
}
35+
}
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+
}];
69+
70+
const clientInsertRes = await client.bulkWrite(clientInserts);
71+
console.log(`Inserted documents: ${clientInsertRes.insertedCount}`);
72+
// end-insert-client
73+
74+
await movies.insertMany(docs);
75+
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"
124+
},
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+
}
170+
}
171+
}
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"
189+
}
190+
},
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"
215+
}
216+
}
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+
}];
243+
244+
const clientDeleteRes = await client.bulkWrite(clientDeletes);
245+
console.log(`Deleted documents: ${clientDeleteRes.deletedCount}`);
246+
// end-delete-client
247+
248+
console.log("Operations completed successfully.");
249+
} finally {
250+
await client.close();
251+
}
252+
})();

0 commit comments

Comments
 (0)