sql >> Databáze >  >> NoSQL >> MongoDB

Načtěte pouze dotazovaný prvek v poli objektů v kolekci MongoDB

Nový $elemMatch MongoDB 2.2 Operátor projekce poskytuje další způsob, jak změnit vrácený dokument tak, aby obsahoval pouze první odpovídající shapes prvek:

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

Vrátí:

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

Ve verzi 2.2 to můžete provést také pomocí $ projection operator , kde $ v promítacím objektu název pole představuje index prvního shodného prvku pole z dotazu. Následující vrátí stejné výsledky jako výše:

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

Aktualizace MongoDB 3.2

Počínaje verzí 3.2 můžete používat nový $filter agregační operátor pro filtrování pole během projekce, což má tu výhodu, že zahrnuje vše shody, nikoli pouze první.

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

Výsledky:

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


  1. Dynamické klíče po $group by

  2. MongoDB vloží float při pokusu o vložení celého čísla

  3. Mongodb findAndModify node js

  4. Redis INCR souběžnost