w3resource

MongoDB Query Operator Array - $elemMatch

Description

The MongoDB $elemMatch operator matches more than one component within an array element.

Our database name is 'myinfo' and our collection name is 'table1'. Here, is the collection bellow.

Sample collection "table1"

{
        "_id" : ObjectId("5285bd678154c4747b705b4f"),
        "item_code" : "I001",
        "category" : [
                "boy",
                "girl"
        ],
        "description" : [
                {
                        "agegroup" : "3-5",
                        "flavour" : "chocolate",
                        "price" : 5
                },
                {
                        "agegroup" : "6-9",
                        "flavour" : "strawberry",
                        "price" : 6
                },
                {
                        "agegroup" : "10-13",
                        "flavour" : "mango",
                        "price" : 7
                }
        ]
}
{
        "_id" : ObjectId("5285bd808154c4747b705b50"),
        "item_code" : "I002",
        "category" : [
                "boy",
                "girl"
        ],
        "description" : [
                {
                        "agegroup" : "3-5",
                        "flavour" : "vanilla",
                        "price" : 3
                },
                {
                        "agegroup" : "6-9",
                        "flavour" : "lemon",
                        "price" : 6
                },
                {
                        "agegroup" : "10-13",
                        "flavour" : "mango",
                        "price" : 5
                }
        ]
}
{
        "_id" : ObjectId("5285bd8a8154c4747b705b51"),
        "item_code" : "I003",
        "category" : [
                "boy",
                "girl"
        ],
        "description" : [
                {
                        "agegroup" : "3-5",
                        "flavour" : "pineapple",
                        "price" : 5
                },
                {
                        "agegroup" : "6-9",
                        "flavour" : "mango",
                        "price" : 6
                },
                {
                        "agegroup" : "10-13",
                        "flavour" : "vanilla",
                        "price" : 5
                }
        ]
}

Example - 1 of MongoDB Evaluation Query operator - $elemMatch

If we want to select all documents from the collection "table1" which satisfying the conditions in the $elemMatch expression in array description -

The agegroup must be within "3-5"

The price must be equal to 5

the following mongodb command can be used :

>db.table1.find( { "description": { $elemMatch: { "agegroup" : "3-5","price" : 5}}}).pretty();

N.B. find() method displays the documents in a non structured format but to display the results in a formatted way, the pretty() method can be used.

Output:

{
        "_id" : ObjectId("5285bd678154c4747b705b4f"),
        "item_code" : "I001",
        "category" : [
                "boy",
                "girl"
        ],
        "description" : [
                {
                        "agegroup" : "3-5",
                        "flavour" : "chocolate",
                        "price" : 5
                },
                {
                        "agegroup" : "6-9",
                        "flavour" : "strawberry",
                        "price" : 6
                },
                {
                        "agegroup" : "10-13",
                        "flavour" : "mango",
                        "price" : 7
                }
        ]
}
{
        "_id" : ObjectId("5285bd8a8154c4747b705b51"),
        "item_code" : "I003",
        "category" : [
                "boy",
                "girl"
        ],
        "description" : [
                {
                        "agegroup" : "3-5",
                        "flavour" : "pineapple",
                        "price" : 5
                },
                {
                        "agegroup" : "6-9",
                        "flavour" : "mango",
                        "price" : 6
                },
                {
                        "agegroup" : "10-13",
                        "flavour" : "vanilla",
                        "price" : 5
                }
        ]
}

Example - 2 of MongoDB Evaluation Query operator - $elemMatch

If we want to select all documents from the collection "table1" which satisfying the conditions in the $elemMatch expression in array description -

The agegroup must be within "10-13"

The price must be more than or equal to 7

the following mongodb command can be used :

>db.table1.find( { "description": { $elemMatch: { "agegroup" : "10-13","price":{$gte:7}}}}).pretty();

N.B. find() method displays the documents in a non structured format but to display the results in a formatted way, the pretty() method can be used.

Output:

{
        "_id" : ObjectId("5285bd678154c4747b705b4f"),
        "item_code" : "I001",
        "category" : [
                "boy",
                "girl"
        ],
        "description" : [
                {
                        "agegroup" : "3-5",
                        "flavour" : "chocolate",
                        "price" : 5
                },
                {
                        "agegroup" : "6-9",
                        "flavour" : "strawberry",
                        "price" : 6
                },
                {
                        "agegroup" : "10-13",
                        "flavour" : "mango",
                        "price" : 7
                }
        ]
}

Previous: $all
Next: $size



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://w3resource.com/mongodb/mongodb-elemmatch-operators.php