MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB $ max

MongoDB có $max 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 lớn hơn giá trị hiện tại của trường.

Nói cách khác, nếu $max giá trị lớn hơn giá trị hiện tại trong tài liệu, $max 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 như thế này:

{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 230 }
{ "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 }
{ "_id" : 3, "exercise" : "squat", "bestLift" : 210 }

Và hãy tưởng tượng rằng chúng tôi cập nhật bộ sưu tập sau mỗi buổi tập với các bài nâng mới nhất. Trong trường hợp này, chúng tôi chỉ muốn bestLift trường sẽ được cập nhật nếu thang máy mới nhất của chúng tôi nặng hơn mức nâng tốt nhất trước đó của chúng tôi (tức là trọng lượng hiện tại được liệt kê cho thang máy tương ứng).

Trong trường hợp này, chúng tôi có thể sử dụng $max để đạt được kết quả đó.

Ví dụ:

db.workout.update( 
  { _id: 1 }, 
  { $max: { bestLift: 240 } } 
)

Đầ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.workout.find()

Kết quả:

{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 240 }
{ "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 }
{ "_id" : 3, "exercise" : "squat", "bestLift" : 210 }

Chúng ta có thể thấy rằng bestLift trường cho tài liệu đầu tiên đã được cập nhật với giá trị mới. Điều này là do 240 cao hơn giá trị trước đó của nó là 230.

Khi giá trị thấp hơn

Khi giá trị được chỉ định bằng $max thấp hơn giá trị hiện có trong tài liệu, không có gì được cập nhật.

Ví dụ:

db.workout.update( 
  { _id: 1 }, 
  { $max: { bestLift: 220 } } 
)

Đầ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.workout.find()

Kết quả:

{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 240 }
{ "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 }
{ "_id" : 3, "exercise" : "squat", "bestLift" : 210 }

Chúng tôi có thể thấy rằng giá trị vẫn ở mức 240, mặc dù chúng tôi đã cố gắng cập nhật nó lên 220. Điều này được mong đợi, vì chúng tôi đã sử dụng $max .

Ngày

Bạn có thể sử dụng $max trên các trường ngày tháng.

Giả sử chúng ta có collection được gọi là đăng ký với tài liệu sau:

{ "_id" : 1, "expiry" : ISODate("2021-01-01T00:00:00Z") } 

Hãy cố gắng cập nhật ngày với một ngày sớm hơn ngày hiện tại trong tài liệu.

db.subscriptions.update( 
  { _id: 1 }, 
  { $max: { expiry: new Date("2020-01-01") } } 
)

Ở đây, chúng tôi cố gắng cập nhật năm từ 2021 đến 2020 . Do ngày mới sớm hơn ngày hiện có, chúng tôi nhận được thông tin sau.

db.subscriptions.find()

Kết quả:

{ "_id" : 1, "expiry" : ISODate("2021-01-01T00:00:00Z") } 

Như mong đợi, không có gì được cập nhật.

Hãy cố gắng cập nhật nó vào một ngày sau đó.

db.subscriptions.update( 
  { _id: 1 }, 
  { $max: { expiry: new Date("2022-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.subscriptions.find()

Kết quả:

{ "_id" : 1, "expiry" : ISODate("2022-01-01T00:00:00Z") }

Ngày đã được cập nhật như dự kiến.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chiến lược đăng ký / xuất bản Meteor cho các bộ sưu tập phía máy khách duy nhất

  2. Cách sử dụng GridFS để lưu trữ hình ảnh bằng Node.js và Mongoose

  3. apollostack / graphql-server - cách lấy các trường được yêu cầu trong truy vấn từ trình giải quyết

  4. Mongoose hết hạn tài sản không hoạt động bình thường

  5. Chèn tệp json vào mongodb