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

Trả về phần tử đầu tiên nếu không tìm thấy kết quả phù hợp nào trong mảng

Bạn có thể thử tổng hợp bên dưới

Về cơ bản, bạn cần phải $ filter các sản phẩm và kiểm tra mã $ cond ition nếu nó không chứa bất kỳ phần tử nào hoặc bằng [] thì bạn phải $ slice với phần tử đầu tiên của sản phẩm mảng.

db.collection.aggregate([
  { "$addFields": {
    "products": {
      "$cond": [
        {
          "$eq": [
            { "$filter": {
              "input": "$products",
              "cond": { "$eq": ["$$this.product_id", 2] }
            }},
            []
          ]
        },
        { "$slice": ["$products", 1] },
        { "$filter": {
          "input": "$products",
          "cond": { "$eq": ["$$this.product_id", 2] }
        }}
      ]
    }
  }}
])

hoặc thậm chí sử dụng $ let tổng hợp

db.collection.aggregate([
  { "$addFields": {
    "products": {
      "$let": {
        "vars": {
          "filt": {
            "$filter": {
              "input": "$products",
              "cond": { "$eq": ["$$this.product_id", 2] }
            }
          }
        },
        "in": {
          "$cond": [
            { "$eq": ["$$filt", []] },
            { "$slice": ["$products", 1] },
            "$$filt"
          ]
        }
      }
    }
  }}
])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chọn Max () với nhóm theo mongodb

  2. Tôi có nên sử dụng tùy chọn allowDiskUse trong môi trường sản phẩm không?

  3. Hiểu về MongoDB Aggregate và GroupBy

  4. Dịch vụ Mongo bị lỗi. Cần tìm lý do của sự cố

  5. Node Js Cách tải tệp vào bộ nhớ mà không cần ghi tệp vào hệ thống hoặc không tạo tệp trong thư mục