MongoDB có $min
toán tử cho phép bạn cập nhật giá trị của trường chỉ khi giá trị được chỉ định nhỏ hơn giá trị hiện tại của trường.
Nói cách khác, nếu $min
giá trị nhỏ hơn giá trị hiện tại trong tài liệu, $min
giá trị được sử dụng. Nếu không, giá trị của tài liệu vẫn không thay đổi.
Ví dụ
Giả sử chúng ta có một bộ sưu tập có tên là golf
với tài liệu sau:
{ "_id" : 1, "strokes" : 70 }
Và hãy tưởng tượng rằng chúng tôi cập nhật tài liệu sau mỗi trận đấu golf với tỷ số mới nhất. Trong trường hợp này, chúng tôi chỉ muốn các strokes
trường sẽ được cập nhật nếu điểm mới nhất của chúng tôi là thấp hơn so với điểm số trước đó của chúng tôi.
Trong trường hợp này, chúng tôi có thể sử dụng $min
để đạt được kết quả đó.
Ví dụ:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 64 } }
)
Đầu ra:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Thông báo này cho chúng tôi biết rằng một tài liệu đã khớp và đã được cập nhật.
Hãy kiểm tra lại bộ sưu tập.
db.golf.find()
Kết quả:
{ "_id" : 1, "strokes" : 64 }
Chúng ta có thể thấy rằng các strokes
trường đã được cập nhật với giá trị mới. Điều này là do 64 thấp hơn giá trị trước đó của nó là 70.
Khi giá trị cao hơn
Khi giá trị được chỉ định bằng $min
cao hơn giá trị hiện có trong tài liệu, không có gì được cập nhật.
Ví dụ:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 72 } }
)
Đầu ra:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Chúng tôi có thể thấy thông báo rằng không có gì được cập nhật.
Hãy kiểm tra lại bộ sưu tập.
db.golf.find()
Kết quả:
{ "_id" : 1, "strokes" : 64 }
Chúng tôi có thể thấy rằng giá trị vẫn ở mức 64, mặc dù chúng tôi đã cố gắng cập nhật nó lên 72. Điều này được mong đợi, vì chúng tôi đã sử dụng $min
.
Ngày
Bạn có thể sử dụng $min
trên các trường ngày tháng.
Giả sử chúng ta có collection
được gọi là loài với tài liệu sau:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Hãy cố gắng cập nhật ngày với một ngày muộn hơn ngày hiện tại trong tài liệu.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("2001-01-01") } }
)
Ở đây, chúng tôi cố gắng cập nhật năm từ 2000
đến 2001
. Do ngày mới muộn hơn ngày hiện tại, chúng tôi nhận được thông tin sau:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Không có gì được cập nhật.
Hãy kiểm tra bộ sưu tập:
db.species.find()
Kết quả:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
Như mong đợi, vẫn giữ nguyên giá trị ngày tháng.
Bây giờ chúng ta hãy thử cập nhật nó với một ngày sớm hơn.
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("1999-01-01") } }
)
Đầu ra:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Chúng ta có thể thấy thông báo rằng tài liệu đã được cập nhật.
Hãy kiểm tra.
db.species.find()
Kết quả:
{ "_id" : 1, "firstDiscovered" : ISODate("1999-01-01T00:00:00Z") }
Ngày đã được cập nhật như dự kiến.