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

Chọn giá trị cuối cùng của mảng trong tài liệu con

Bạn cần khung tổng hợp để làm điều này, tôi nghĩ bạn thực sự nên thay đổi cấu trúc, nhưng làm việc với những gì bạn có:

Model.aggregate(
    [
       { "$match": { "prices.100": { "$exists": true } }},
       { "$unwind": "$prices.100" },
       { "$group": {
          "_id": "$_id",
          "price": { "$last": "$prices.100" }
       }},
       { "$project": { "_id": 0, "prices.100": "$price" } }
     ]
) 

Trong các bản phát hành trong tương lai, bạn sẽ có thể chỉ sử dụng $slice mới nhà điều hành:

Model.aggregate(
    [
        { "$match": { "prices.100": { "$exists": true } } },
        { "$project": {
            "_id": 0,
            "prices.100": { "$slice": ["$prices.100",-1] }
        }}
    ]
)

Trên thực tế, bạn có thể thực hiện "cả hai" trường cùng một lúc:

Model.aggregate(
    [
        { "$match": { "prices.100": { "$exists": true } } },
        { "$project": {
            "_id": 0,
            "prices.100": { "$slice": ["$prices.100",-1] },
            "prices.101": { "$slice": ["$prices.100",-1] }
        }}
    ]
)

Và điều đó tốt hơn rất nhiều so với xử lý bằng $unwind $last để lấy phần tử cuối cùng của mảng khi $group được áp dụng để lấy lại dữ liệu.

Về cơ bản, nó có hiệu suất giống như một truy vấn thông thường ở dạng mới hơn. Ở dạng hiện tại, nó sẽ chậm hơn.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. node.js lưu các số dấu phẩy động lớn vào mongo để tìm kiếm

  2. sắp xếp theo độ dài chuỗi trong Mongodb / pymongo

  3. Làm cách nào để xuất / kết xuất cơ sở dữ liệu mongodb?

  4. Lập bản đồ - Tài liệu nhúng Mongodb trong Symfony2

  5. Toán tử cấp cao nhất không xác định MongoError:$ set