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

MongoDB:Sử dụng khớp với các biến tài liệu đầu vào

Điều này có nghĩa là nếu bạn đang sử dụng các biến đầu vào trong $ lookuppipeline, bạn phải sử dụng $ expr

Đúng, theo mặc định trong các bộ lọc, tức là; trong phần bộ lọc của .find() hoặc trong $match giai đoạn tổng hợp, bạn không thể sử dụng trường hiện có trong tài liệu.

Nếu hoàn toàn, nếu bạn cần sử dụng giá trị của trường hiện có trong bộ lọc truy vấn của mình thì bạn cần sử dụng đường dẫn tổng hợp, Vì vậy, để sử dụng đường dẫn tổng hợp trong .find() hoặc trong $match bạn cần kết hợp truy vấn bộ lọc của mình bằng $ expr. Cùng một cách để truy cập các biến cục bộ đã được tạo bằng cách sử dụng let trong tổng số $lookup lọc trong $match cần được bao bọc bởi $expr .

Hãy xem xét ví dụ dưới đây:

Tài liệu mẫu:

[
  {
    "key": 1,
    "value": 2
  },
  {
    "key": 2,
    "value": 4
  },
  {
    "key": 5,
    "value": 5
  }
]

Truy vấn:

 db.collection.find({ key: { $gt: 1 }, value: { $gt: 4 } })

    Or

 db.collection.aggregate([ { $match: { key: { $gt: 1 }, value: { $gt: 4 } } } ])

Kiểm tra: mongoplayground

Nếu bạn thấy truy vấn trên, cả hai đầu vào 1 &4 được chuyển vào truy vấn nhưng bạn kiểm tra truy vấn bên dưới nơi bạn cố gắng khớp với key trường ==value trường - nó không hoạt động:

db.collection.aggregate([ { $match: { key: { $eq: "$value" } } } ])

Kiểm tra: mongoplayground

Ở trên khi bạn đang so sánh hai trường hiện có thì bạn không thể làm điều đó vì điều đó có nghĩa là bạn đang kiểm tra tài liệu bằng key giá trị trường dưới dạng chuỗi "$value" . Vì vậy, để nói rằng nó không phải là một chuỗi, nó thực sự là một tham chiếu đến giá trị value trường bạn cần sử dụng toán tử tổng hợp $ eq thay vì toán tử truy vấn $ eq như bên dưới:

 db.collection.aggregate([ { $match: { $expr: { $eq: [ "$key", "$value" ] } } } ])

Kiểm tra: mongoplayground



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cần một giải pháp thay thế để tra cứu một chuỗi thành objectID ForeignField

  2. Toán tử $ unwind trong MongoDB là gì?

  3. MongoDB $ trim

  4. Meteor, One to Many Relationship &chỉ thêm trường vào bộ sưu tập phía máy khách trong Xuất bản?

  5. Làm cách nào để trả lại định dạng ngày ISO trong PHP cho MongoDB?