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

Nhà điều hành đường ống tổng hợp MongoDB $ đầu tiên

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

Toán tử này trả về phần tử đầu tiên 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 ta có thể sử dụng $first để trả về phần tử đầu tiên của mỗi mảng đó.

Ví dụ:

db.players.aggregate([ 
  {
    $project: {
        "firstScore": { 
          $first: "$scores" 
        }
    }
  } 
])

Kết quả:

{ "_id" : 1, "firstScore" : 1 }
{ "_id" : 2, "firstScore" : 8 }
{ "_id" : 3, "firstScore" : 15 }

Chúng ta có thể thấy rằng phần tử đầu tiên 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ị bằng 0 (0 ):

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

Mảng trống

Nếu bạn cung cấp một mảng trống, $first 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: {
        "firstScore": { 
          $first: "$scores" 
        }
    }
  } 
])

Kết quả:

{ "_id" : 1, "firstScore" : 1 }
{ "_id" : 2, "firstScore" : 8 }
{ "_id" : 3, "firstScore" : 15 }
{ "_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. Trên thực tế, nó thậm chí không trả về tên trường.

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

Nếu toán hạng là null hoặc bị thiếu, $first 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: {
        "firstScore": { 
          $first: "$scores" 
        }
    }
  } 
])

Kết quả:

{ "_id" : 1, "firstScore" : 1 }
{ "_id" : 2, "firstScore" : 8 }
{ "_id" : 3, "firstScore" : 15 }
{ "_id" : 4 }
{ "_id" : 5, "firstScore" : 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 $first 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 $first chống lại player trường (không phải là một mảng):

db.players.aggregate([ 
  {
    $project: {
        "firstPlayer": { 
          $first: "$player" 
        }
    }
  } 
])

Kết quả:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$first'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. Cách thiết kế môi trường cơ sở dữ liệu nguồn mở khả dụng cao

  2. MongoDB Hiển thị các mục trẻ em trong mối quan hệ Một đến Nhiều

  3. Định hình lại tài liệu MongoDB

  4. Mongorestore, từ máy chủ sản xuất thiên thạch đến cục bộ

  5. Tự động hóa triển khai cơ sở dữ liệu MongoDB