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

Nhà điều hành đường ống tổng hợp cuối cùng MongoDB $

MongoDB 4.4 đã giới thiệu $last nhà điều hành đường ống tổng hợp.

Toán tử này trả về phần tử cuối cùng trong một mảng.

Ví dụ

Giả sử chúng ta có một bộ sưu tập được gọi là trình phát với các tài liệu sau:

{ "_id" : 1, "player" : "Homer", "scores" : [ 1, 5, 3 ] }
{ "_id" : 2, "player" : "Marge", "scores" : [ 8, 17, 18 ] }
{ "_id" : 3, "player" : "Bart", "scores" : [ 15, 11, 8 ] }

Chúng ta có thể thấy rằng mỗi tài liệu có scores trường có chứa một mảng.

Chúng tôi có thể sử dụng $last để trả về phần tử cuối cùng của mỗi mảng đó.

Ví dụ:

db.players.aggregate([ 
  {
    $project: {
        "lastScore": { 
          $last: "$scores" 
        }
    }
  } 
])

Kết quả:

{ "_id" : 1, "lastScore" : 3 }
{ "_id" : 2, "lastScore" : 18 }
{ "_id" : 3, "lastScore" : 8 }

Chúng ta có thể thấy rằng phần tử cuối cùng của mảng đã được trả về cho mỗi tài liệu.

Điều này tương đương với việc sử dụng $arrayElemAt toán tử có giá trị -1 :

db.players.aggregate([
  {
    $project: {
      "firstScore": { $arrayElemAt: [ "$scores", -1 ] }
    }
  }
])

Mảng trống

Nếu bạn cung cấp một mảng trống, $last sẽ không trả về giá trị.

Giả sử chúng ta chèn tài liệu sau vào bộ sưu tập của mình:

{ "_id" : 4, "player" : "Farnsworth", "scores" : [ ] }

Hãy chạy lại mã:

db.players.aggregate([ 
  {
    $project: {
        "lastScore": { 
          $last: "$scores" 
        }
    }
  } 
])

Kết quả:

{ "_id" : 1, "lastScore" : 3 }
{ "_id" : 2, "lastScore" : 18 }
{ "_id" : 3, "lastScore" : 8 }
{ "_id" : 4 }

Trong trường hợp này, tài liệu 4 không trả về bất kỳ giá trị nào cho mảng. Nó thậm chí không trả lại tên trường.

Giá trị rỗng và thiếu

Nếu toán hạng là null hoặc bị thiếu, $last trả về null .

Giả sử chúng ta chèn tài liệu sau:

{ "_id" : 5, "player" : "Meg", "scores" : null }

Hãy chạy lại mã:

db.players.aggregate([ 
  {
    $project: {
        "lastScore": { 
          $last: "$scores" 
        }
    }
  } 
])

Kết quả:

{ "_id" : 1, "lastScore" : 3 }
{ "_id" : 2, "lastScore" : 18 }
{ "_id" : 3, "lastScore" : 8 }
{ "_id" : 4 }
{ "_id" : 5, "lastScore" : null }

Lần này, nó trả về trường có giá trị là null .

Toán hạng không hợp lệ

Toán hạng cho $last phải giải quyết một mảng, null hoặc bị thiếu. Cung cấp toán hạng không hợp lệ dẫn đến lỗi.

Để chứng minh điều này, hãy thử sử dụng $last chống lại player trường (không phải là một mảng):

db.players.aggregate([ 
  {
    $project: {
        "lastPlayer": { 
          $last: "$player" 
        }
    }
  } 
])

Kết quả:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$last's argument must be an array, but is string",
	"code" : 28689,
	"codeName" : "Location28689"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

Như mong đợi, nó trả về một lỗi.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. quá nhiều tệp đang mở trong máy chủ mgo go

  2. Điền vào một mô hình mongoose với một trường không phải là id

  3. Làm cách nào để kết nối với MongoDB trong Windows?

  4. Làm cách nào để lấy N bản ghi cuối cùng trong mongodb?

  5. Quảng cáo các trường con lên cấp cao nhất trong phép chiếu mà không cần liệt kê tất cả các khóa