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

Làm cách nào để sử dụng $ Slice a $ filter kết quả trong MongoDB?

Một cách thực hiện sẽ như thế này (không cần đến giai đoạn $ match tùy thuộc vào cấu trúc dữ liệu và thiết lập lập chỉ mục của bạn, bạn có thể vẫn muốn giữ nó, tuy nhiên, vì lý do hiệu suất):

 db.item.aggregate([
    { "$project": { 
        "items": { 
            "$slice": [ 
                { "$filter": { 
                    "input": "$items",
                    "as": "item", 
                    "cond": { "$eq": [ "$$item.status", "active" ] } 
                }}, 
                -3,2 
            ] 
        } 
    }}
])

Tuy nhiên, tôi nghĩ có lẽ tốt hơn nên sử dụng truy vấn sau:

db.items.db.aggregate([
{
    $project: {
        "items": {
            "$filter": { 
                "input": "$items",
                "as": "item", 
                "cond": { "$eq": [ "$$item.status", "active" ] } 
            }
        } 
    }
}, {
    $project: {
        "items": {
            $slice: [
                {
                    $slice: [
                        "$items",
                        {
                            $subtract: [ { $size: "$items" }, 1 ] // length of items array minus one
                        } 
                    ]
                }, 2 // max two elements
            ]
        }
    }
}])

vì phần tử này trước tiên sẽ loại bỏ phần tử cuối cùng và sau đó giới hạn đầu ra ở hai mục, có thể nhiều hơn những gì bạn muốn trong tình huống có ít hơn 3 phần tử "hoạt động".




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chèn Ngày () vào Mongodb thông qua trình bao mongo

  2. MongoDB Aggregation, có cách nào để nhận được các Số liệu thực thi từ một con trỏ tổng hợp không?

  3. Cách kiểm tra trước tài liệu MongoDB đã xuất trong mongoexport

  4. Cách kết nối Flaming với MongoDB

  5. lưu trữ upvotes / downvotes trong mongodb