sql >> Database teknologi >  >> NoSQL >> MongoDB

Hent kun det forespurgte element i et objektarray i MongoDB-samlingen

MongoDB 2.2's nye $elemMatch projektionsoperatør giver en anden måde at ændre det returnerede dokument til kun at indeholde det første matchede shapes element:

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

Returnerer:

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

I 2.2 kan du også gøre dette ved at bruge $ projection operator , hvor $ i et projektionsobjekt repræsenterer feltnavnet indekset for feltets første matchende array-element fra forespørgslen. Følgende returnerer de samme resultater som ovenfor:

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

MongoDB 3.2-opdatering

Fra og med 3.2-udgivelsen kan du bruge det nye $filter aggregeringsoperator til at filtrere et array under projektion, hvilket har fordelen ved at inkludere alle matcher i stedet for kun den første.

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

Resultater:

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


  1. Sådan får du adgang til MongoDB Instance 4.2?

  2. Hvor er datakataloget i Redis?

  3. Redis koncept:I hukommelsen eller DB?

  4. Hvor er meteor MongoDB-databasen?