Để tăng giá trị trường số trong Mongoose, bạn có thể sử dụng toán tử $inc
. Toán tử này tăng một trường theo một giá trị đã chỉ định
Dưới đây là một ví dụ cập nhật giá trị của trường clicks
bằng cách sử dụng toán tử $inc
const mongoose = require['mongoose']
const Link = mongoose.model['Link', { url: String, clicks: Number }]
const id = 'B12'
await Link.findByIdAndUpdate[id, { clicks: { $inc: 1 } }]
Toán tử $inc
chấp nhận cả giá trị dương và âm. Vì vậy, nó cũng có thể được sử dụng để giảm giá trị a được hiển thị bên dưới
Trước tiên chúng ta hãy tạo một bộ sưu tập với các tài liệu -
>db.decrementingOperationDemo.insertOne[{"ProductName":"Product-1","ProductPrice":756}]; { "acknowledged" : true, "insertedId" : ObjectId["5cd7a8ae6d78f205348bc63c"] } >db.decrementingOperationDemo.insertOne[{"ProductName":"Product-2","ProductPrice":890}]; { "acknowledged" : true, "insertedId" : ObjectId["5cd7a8b86d78f205348bc63d"] } >db.decrementingOperationDemo.insertOne[{"ProductName":"Product-3","ProductPrice":994}]; { "acknowledged" : true, "insertedId" : ObjectId["5cd7a8c66d78f205348bc63e"] } >db.decrementingOperationDemo.insertOne[{"ProductName":"Product-4","ProductPrice":1000}]; { "acknowledged" : true, "insertedId" : ObjectId["5cd7a8d06d78f205348bc63f"] }
Sau đây là truy vấn để hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find[] -
> db.decrementingOperationDemo.find[].pretty[];
Điều này sẽ tạo ra đầu ra sau -
{ "_id" : ObjectId["5cd7a8ae6d78f205348bc63c"], "ProductName" : "Product-1", "ProductPrice" : 756 } { "_id" : ObjectId["5cd7a8b86d78f205348bc63d"], "ProductName" : "Product-2", "ProductPrice" : 890 } { "_id" : ObjectId["5cd7a8c66d78f205348bc63e"], "ProductName" : "Product-3", "ProductPrice" : 994 } { "_id" : ObjectId["5cd7a8d06d78f205348bc63f"], "ProductName" : "Product-4", "ProductPrice" : 1000 }
Sau đây là truy vấn giảm một giá trị -
> db.decrementingOperationDemo.update[{_id: ObjectId["5cd7a8d06d78f205348bc63f"], ProductPrice: {$gt: 0}}, {$inc: {ProductPrice: -10}}]; WriteResult[{ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }]
Hãy để chúng tôi kiểm tra tài liệu một lần nữa -
> db.decrementingOperationDemo.find[].pretty[];
Điều này sẽ tạo ra đầu ra sau -
{ "_id" : ObjectId["5cd7a8ae6d78f205348bc63c"], "ProductName" : "Product-1", "ProductPrice" : 756 } { "_id" : ObjectId["5cd7a8b86d78f205348bc63d"], "ProductName" : "Product-2", "ProductPrice" : 890 } { "_id" : ObjectId["5cd7a8c66d78f205348bc63e"], "ProductName" : "Product-3", "ProductPrice" : 994 } { "_id" : ObjectId["5cd7a8d06d78f205348bc63f"], "ProductName" : "Product-4", "ProductPrice" : 990 }
MongoDB cung cấp các loại toán tử cập nhật trường khác nhau để cập nhật giá trị của các trường trong tài liệu và toán tử $inc
là một trong số đó. Toán tử này được sử dụng để tăng giá trị của các trường lên số lượng đã chỉ định hoặc để tăng trường theo giá trị đã cho
Bạn cũng có thể sử dụng toán tử này trong các tài liệu nhúng/lồng nhau. Bạn có thể sử dụng toán tử này trong các phương thức như update[], updateOne[], v.v. theo yêu cầu của bạn
- Toán tử này chấp nhận các giá trị dương và âm
- Nếu trường đã cho không tồn tại thì toán tử này sẽ tạo trường và đặt giá trị cho trường đó
- Toán tử này sẽ tạo ra lỗi, nếu bạn sử dụng toán tử này với trường giá trị null
- Nó là một hoạt động nguyên tử trong một tài liệu duy nhất
cú pháp
{ $inc: { field1: amount1, field2: amount2, .. } }
Trong các ví dụ sau, chúng tôi đang làm việc với
cơ sở dữ liệu. GeekforGeek
Bộ sưu tập. người đóng góp
Tài liệu. ba tài liệu chứa thông tin chi tiết về những người đóng góp ở dạng cặp trường-giá trị
Tăng giá trị của trường bằng toán tử $inc
Trong ví dụ này, chúng tôi đang cập nhật trường tài liệu của nhân viên có tên là Mohit bằng cách tăng giá trị của xếp hạng lên 2