MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Pobierz tylko żądany element z tablicy obiektów w kolekcji MongoDB

Nowy $elemMatch MongoDB 2.2 operator projekcji zapewnia inny sposób zmiany zwracanego dokumentu tak, aby zawierał tylko pierwszy dopasowane shapes element:

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

Zwroty:

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

W 2.2 możesz to również zrobić za pomocą $ projection operator , gdzie $ w obiekcie rzutowania nazwa pola reprezentuje indeks pierwszego pasującego elementu tablicy pola z zapytania. Następujące wyniki zwracają te same wyniki, co powyżej:

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

Aktualizacja MongoDB 3.2

Począwszy od wersji 3.2, możesz użyć nowego $filter operator agregacji do filtrowania tablicy podczas projekcji, co ma tę zaletę, że zawiera wszystkie pasuje, zamiast tylko pierwszego.

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
    }}
])

Wyniki:

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ochrona danych z ClusterControl

  2. MongoDB operator zapytań typu $

  3. Jak sprawdzić, czy indeks jest używany?

  4. Nie można utworzyć działającego projektu meteor.js na wędrującym pudełku

  5. Wskazówki dotyczące zarządzania konfiguracjami baz danych