-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathupdateOne.examples.js
More file actions
271 lines (225 loc) · 8.34 KB
/
updateOne.examples.js
File metadata and controls
271 lines (225 loc) · 8.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
/**
* updateOne 方法使用示例
* 演示如何更新单个MongoDB文档
*/
const MonSQLize = require("../lib/index");
async function main() {
// 初始化 MonSQLize
const msq = new MonSQLize({
type: "mongodb",
databaseName: "examples_db",
config: {
uri: "mongodb://localhost:27017"
// 或使用内存服务器: useMemoryServer: true
}
});
try {
const conn = await msq.connect();
const collection = conn.collection;
console.log("=".repeat(60));
console.log("updateOne 方法示例");
console.log("=".repeat(60) + "\n");
// ========================================
// 示例 1: 基本更新 - 使用 $set
// ========================================
console.log("示例 1: 基本更新 - 使用 $set");
console.log("-".repeat(60));
// 先插入测试数据
await collection("users").insertOne({
userId: "user001",
name: "Alice",
email: "alice@example.com",
status: "inactive"
});
// 更新单个字段
const result1 = await collection("users").updateOne(
{ userId: "user001" },
{ $set: { status: "active" } }
);
console.log("更新结果:", result1);
console.log("- matchedCount:", result1.matchedCount);
console.log("- modifiedCount:", result1.modifiedCount);
console.log();
// ========================================
// 示例 2: 递增计数器 - 使用 $inc
// ========================================
console.log("示例 2: 递增计数器 - 使用 $inc");
console.log("-".repeat(60));
await collection("users").insertOne({
userId: "user002",
name: "Bob",
loginCount: 5
});
const result2 = await collection("users").updateOne(
{ userId: "user002" },
{ $inc: { loginCount: 1 } }
);
console.log("登录计数递增:", result2.modifiedCount, "个文档");
console.log();
// ========================================
// 示例 3: 数组操作 - 使用 $push
// ========================================
console.log("示例 3: 数组操作 - 使用 $push");
console.log("-".repeat(60));
await collection("users").insertOne({
userId: "user003",
name: "Charlie",
tags: ["developer"]
});
const result3 = await collection("users").updateOne(
{ userId: "user003" },
{ $push: { tags: "nodejs" } }
);
console.log("添加标签:", result3.modifiedCount, "个文档");
console.log();
// ========================================
// 示例 4: 多个操作符组合
// ========================================
console.log("示例 4: 多个操作符组合");
console.log("-".repeat(60));
await collection("users").insertOne({
userId: "user004",
name: "David",
age: 25,
loginCount: 10,
tags: []
});
const result4 = await collection("users").updateOne(
{ userId: "user004" },
{
$set: { name: "David Updated", lastLoginAt: new Date() },
$inc: { loginCount: 1, age: 1 },
$push: { tags: "premium" }
}
);
console.log("组合更新:", result4.modifiedCount, "个文档");
console.log();
// ========================================
// 示例 5: 使用 upsert 选项
// ========================================
console.log("示例 5: 使用 upsert 选项");
console.log("-".repeat(60));
const result5 = await collection("users").updateOne(
{ userId: "user005" },
{
$set: {
name: "Eve",
email: "eve@example.com",
status: "active"
},
$setOnInsert: { createdAt: new Date() }
},
{ upsert: true }
);
console.log("Upsert 结果:");
console.log("- matchedCount:", result5.matchedCount);
console.log("- modifiedCount:", result5.modifiedCount);
console.log("- upsertedCount:", result5.upsertedCount);
console.log("- upsertedId:", result5.upsertedId);
console.log();
// ========================================
// 示例 6: 更新嵌套字段
// ========================================
console.log("示例 6: 更新嵌套字段");
console.log("-".repeat(60));
await collection("users").insertOne({
userId: "user006",
profile: {
name: "Frank",
address: {
city: "Beijing",
country: "China"
}
}
});
const result6 = await collection("users").updateOne(
{ userId: "user006" },
{ $set: { "profile.address.city": "Shanghai" } }
);
console.log("更新嵌套字段:", result6.modifiedCount, "个文档");
console.log();
// ========================================
// 示例 7: 删除字段 - 使用 $unset
// ========================================
console.log("示例 7: 删除字段 - 使用 $unset");
console.log("-".repeat(60));
await collection("users").insertOne({
userId: "user007",
name: "Grace",
tempField: "temp",
debugMode: true
});
const result7 = await collection("users").updateOne(
{ userId: "user007" },
{ $unset: { tempField: "", debugMode: "" } }
);
console.log("删除字段:", result7.modifiedCount, "个文档");
console.log();
// ========================================
// 示例 8: 使用 comment 选项(便于日志追踪)
// ========================================
console.log("示例 8: 使用 comment 选项");
console.log("-".repeat(60));
await collection("users").insertOne({
userId: "user008",
name: "Henry"
});
const result8 = await collection("users").updateOne(
{ userId: "user008" },
{ $set: { status: "verified" } },
{ comment: "用户验证更新 - 批次202511" }
);
console.log("带注释的更新:", result8.modifiedCount, "个文档");
console.log();
// ========================================
// 示例 9: 条件更新(仅当字段满足条件)
// ========================================
console.log("示例 9: 条件更新");
console.log("-".repeat(60));
await collection("users").insertOne({
userId: "user009",
age: 30,
status: "active"
});
// 仅更新年龄 >= 18 且状态为 active 的用户
const result9 = await collection("users").updateOne(
{
userId: "user009",
age: { $gte: 18 },
status: "active"
},
{ $set: { verified: true } }
);
console.log("条件更新:", result9.modifiedCount, "个文档");
console.log();
// ========================================
// 示例 10: 错误处理
// ========================================
console.log("示例 10: 错误处理");
console.log("-".repeat(60));
try {
// 错误示例:缺少更新操作符
await collection("users").updateOne(
{ userId: "user010" },
{ name: "Invalid" } // 缺少 $set
);
} catch (err) {
console.log("捕获错误:");
console.log("- 错误代码:", err.code);
console.log("- 错误信息:", err.message);
}
console.log();
console.log("=".repeat(60));
console.log("示例执行完成!");
console.log("=".repeat(60));
} catch (error) {
console.error("发生错误:", error);
} finally {
await msq.close();
}
}
// 运行示例
if (require.main === module) {
main().catch(console.error);
}
module.exports = main;