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

Đánh giá có điều kiện một phần tử mảng để trả về

Đây là một ví dụ sử dụng Khung tổng hợp trong MongoDB 2.4.9 mà tôi nghĩ sẽ đạt được kết quả như bạn mong muốn:

db.books.aggregate(

    // Unwind the refs array
    { $unwind: "$refs" },

    // Sort by refs.default descending so "true" values will be first, nulls last
    { $sort: {
        "refs.default" : -1
    }},

    // Group and take the first ref; should either be "default:true" or first element
    { $group: {
        _id: "$_id",
        name: { $addToSet: "$name" },
        refs: { $first: "$refs" }
    }},

    // (optional) Sort by name to match the example output
    { $sort: {
        name: 1,
    }},

    // (optional) Clean up output
    { $project: {
        _id: 0,
        name: 1,
        refs: 1
    }}
)

Kết quả mẫu:

{
    "result" : [
        {
            "name" : [
                "Book1"
            ],
            "refs" : {
                "oid" : "object5",
                "default" : true
            }
        },
        {
            "name" : [
                "Book2"
            ],
            "refs" : {
                "oid" : "object5",
                "default" : true
            }
        },
        {
            "name" : [
                "Book3"
            ],
            "refs" : {
                "oid" : "object4"
            }
        },
        {
            "name" : [
                "Book4"
            ],
            "refs" : {
                "oid" : "object4",
                "default" : true
            }
        }
    ],
    "ok" : 1
}

Ghi chú:

  • Điều này tạo ra một giả định về hành vi thứ tự sắp xếp cho refs trong đó "default:true" bị thiếu. Trong quá trình kiểm tra ngắn gọn, thứ tự ban đầu dường như được giữ nguyên, vì vậy phần tử "đầu tiên" của mảng như mong đợi.

  • Do các toán tử tổng hợp được sử dụng, đầu ra name là một mảng phần tử đơn và refs trở thành một đối tượng nhúng. Thay vì thao tác thêm trong Khung tổng hợp, bạn chỉ có thể tham chiếu các trường chính xác trong mã ứng dụng của mình.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Thay đổi mật khẩu trong MongoDB cho người dùng hiện tại

  2. django-nonrel loại trừ trường danh sách khỏi quản trị viên

  3. Tổng quan về MongoDB và Cân bằng tải

  4. Làm cách nào để truy vấn trực tiếp trường lồng nhau mà không chỉ định trường mẹ?

  5. Populate () ref được lồng trong mảng đối tượng