кодесурса
«MongoDB

Оператор проекции MongoDB - $ elemMatch

script1adsense2code
script1adsense3code

Описание

В MongoDB оператор проекции $ elemMatch используется для ограничения содержимого поля массива, включенного в результаты запроса, чтобы оно содержало только первый соответствующий элемент в массиве в соответствии с заданным условием.

Элементы массива обрабатываются как документ.

Если несколько элементов совпадают с оператором $ elemMatch, то только первый соответствующий элемент может отображаться в результате.

Имя нашей базы данных - «myinfo», а имя нашей коллекции - «mediitem2». Вот коллекция ниже.

Коллекция образцов "mediitem2"

{
        "_id" : 1,
        "batch" : 10452,
        "tran_details" : [
                {
                        "qty" : 200,
                        "prate" : 50,
                        "mrp" : 70
                },
                {
                        "qty" : 250,
                        "prate" : 50,
                        "mrp" : 60
                },
                {
                        "qty" : 190,
                        "prate" : 55,
                        "mrp" : 75
                }
        ]
}
{
        "_id" : 2,
        "batch" : 73292,
        "tran_details" : [
                {
                        "qty" : 210,
                        "prate" : 54,
                        "mrp" : 64
                },
                {
                        "qty" : 225,
                        "prate" : 60,
                        "mrp" : 68
                }
        ]
}
{
        "_id" : 3,
        "batch" : 10452,
        "tran_details" : [
                {
                        "qty" : 185,
                        "prate" : 57,
                        "mrp" : 68
                },
                {
                        "qty" : 200,
                        "prate" : 57,
                        "mrp" : 65
                }
        ]
}
{
        "_id" : 4,
        "batch" : 10452,
        "tran_details" : [
                {
                        "qty" : 185,
                        "prate" : 50,
                        "mrp" : 68
                }
        ]
}

Пример 1

Следующая операция mongodb find () запрашивает все документы из коллекции, где значение поля пакета равно 10452. Проекция $ elemMatch возвращает только первый соответствующий элемент (хотя он соответствует более чем одному элементу) массива tran_details, где находится поле prate. имеет значение 50.

 db.mediitem2.find( { batch: 10452 },{ tran_details: { $elemMatch: { prate: 50 } } } ).pretty();

Примечание. Метод find () отображает документы в неструктурированном формате, но для отображения результатов в отформатированном виде можно использовать метод pretty ().

Вывод команды:

 {
        "_id": 1,
        "tran_details": [
                {
                        кол-во: 200,
                        "prate": 50,
                        mrp: 70
                }
        ]
}
{"_id": 3}
{
        "_id": 4,
        "tran_details": [
                {
                        «Кол-во»: 185,
                        "prate": 50,
                        mrp: 68
                }
        ]
}

Вот в приведенном выше примере

  • для документа с _id, равным 1, массив tran_details содержит несколько элементов с полем prate, равным 50. Однако проекция $ elemMatch возвращает только первый соответствующий элемент из массива.
  • Документ с _id, равным 3, не содержит поле tran_details в результате, что ни один элемент не соответствует условию $ elemMatch.
  • и для документа с _id, равным 4, массив tran_details содержит только элементы с полем prate, равным 50.

Пример 2

Следующая операция find () запрашивает все документы, в которых значение поля пакета равно 10452. Проекция включает первый соответствующий элемент массива tran_details, где поле prate имеет значение 50, а поле mrp больше, чем равно 70 ,

> db.mediitem2.find({batch: 10452 },{tran_details: {$elemMatch: {prate: 50, mrp: {$gte: 70}}}}).pretty();

Вывод команды:

 {
        "_id": 1,
        "tran_details": [
                {
                        кол-во: 200,
                        "prate": 50,
                        mrp: 70
                }
        ]
}
{"_id": 3}
{"_id": 4}

Вот в приведенном выше примере

  • для документа с _id, равным 1, массив tran_details содержит несколько элементов с полем prate, равным 50, и mrp, большим, чем равным 70. Однако проекция $ elemMatch возвращает только первый соответствующий элемент из массива.
  • Документ с _id, равным 3 и 4, не содержит поля tran_details в результате, что ни один элемент не соответствует условию $ elemMatch.

Пример 3: оператор проекции MongoDB - $ elemMatch с сортировкой

Если поле массива содержит несколько документов с одним и тем же именем поля, то для сортировки повторяющегося поля в определенном порядке можно использовать метод sort () и метод find ().

Следующая операция mongodb find () запрашивает все документы из коллекции, где значение поля пакета равно 10452. Проекция $ elemMatch возвращает только первый соответствующий элемент (хотя он соответствует более чем одному элементу) массива tran_details, где находится поле prate. имеет значение 50, и результирующий набор будет располагаться в порядке возрастания в соответствии с полем или кол-во.

> db.mediitem2.find({ batch: 10452 },{ tran_details: { $elemMatch: { prate: 50 }}}).sort({"tran_details.qty":1}).pretty();

Примечание. Метод find () отображает документы в неструктурированном формате, но для отображения результатов в отформатированном виде можно использовать метод pretty ().

Вывод команды:

 {"_id": 3}
{
        "_id": 4,
        "tran_details": [
                {
                        «Кол-во»: 185,
                        "prate": 50,
                        mrp: 68
                }
        ]
}
{
        "_id": 1,
        "tran_details": [
                {
                        кол-во: 200,
                        "prate": 50,
                        mrp: 70
                }
        ]
}

Предыдущая: $
Далее: $ slice

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code