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

Chỉ truy xuất phần tử được truy vấn trong một mảng đối tượng trong bộ sưu tập MongoDB

MongoDB 2.2 mới của $elemMatch toán tử phép chiếu cung cấp một cách khác để thay đổi tài liệu được trả về để chỉ chứa đầu tiên shapes phần tử:

db.test.find(
    {"shapes.color": "red"}, 
    {_id: 0, shapes: {$elemMatch: {color: "red"}}});

Lợi nhuận:

{"shapes" : [{"shape": "circle", "color": "red"}]}

Trong 2.2, bạn cũng có thể thực hiện việc này bằng cách sử dụng toán tử $ projection operator , trong đó $ trong tên trường đối tượng chiếu đại diện cho chỉ mục của phần tử mảng phù hợp đầu tiên của trường từ truy vấn. Phần sau trả về kết quả tương tự như trên:

db.test.find({"shapes.color": "red"}, {_id: 0, 'shapes.$': 1});

Bản cập nhật MongoDB 3.2

Bắt đầu với bản phát hành 3.2, bạn có thể sử dụng $filter mới toán tử tổng hợp để lọc một mảng trong quá trình chiếu, có lợi ích là bao gồm tất cả phù hợp, thay vì chỉ kết quả đầu tiên.

db.test.aggregate([
    // Get just the docs that contain a shapes element where color is 'red'
    {$match: {'shapes.color': 'red'}},
    {$project: {
        shapes: {$filter: {
            input: '$shapes',
            as: 'shape',
            cond: {$eq: ['$$shape.color', 'red']}
        }},
        _id: 0
    }}
])

Kết quả:

[ 
    {
        "shapes" : [ 
            {
                "shape" : "circle",
                "color" : "red"
            }
        ]
    }
]


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách lấy Ngày, Tháng và Năm từ một Ngày trong SQL

  2. Làm cách nào để tránh cảnh báo transparent_hugepage / defrag từ mongodb?

  3. Toán tử tổng hợp MongoDB $ count

  4. Mongoose JS findOne luôn trả về null

  5. tạo giản đồ mongoose