кодесурса
«MongoDB

Оператор этапов агрегации MongoDB - $ проект

script1adsense2code
script1adsense3code

Описание

Функция $ project в MongoDB передает документы только с указанными полями на следующую стадию в конвейере. Это могут быть существующие поля из входных документов или вновь вычисленные поля.

Синтаксис:

 {$ проект: {<спецификации>}}

Спецификация для команды $ project содержит включение полей, подавление поля _id, добавление новых полей и сброс значений существующих полей.

Параметры:

Спецификация Описание
<field>: <1 или true> Укажите включение поля.
_id: <0 или false> Укажите подавление поля _id.
<поле>: <выражение> Добавьте новое поле или сбросьте значение существующего поля.

Нужно помнить:

  • По умолчанию поле _id включено в выходные документы. Чтобы исключить поле _id из выходных документов, необходимо явно указать подавление поля _id в $ project.
  • Поле, которое не существует в документе, будет включать, $ project игнорирует включение этого поля;
  • Можно добавить новое поле и значение существующего поля можно сбросить, указав имя поля и установив его значение в некотором выражении.

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


{
        "_id" : ObjectId("553f35a0eff0e6345e7c95e7"),
        "emp_code" : "E001",
        "emp_name" : "Alex kon",
        "date_of_join" : "16/10/2010",
        "salary" : 8000
}
{
        "_id" : ObjectId("553f35d1eff0e6345e7c95e8"),
        "emp_code" : "E002",
        "emp_name" : "Peter Dex",
        "date_of_join" : "16/06/2011",
        "salary" : 6000
}
{
        "_id" : ObjectId("553f39edeff0e6345e7c95e9"),
        "emp_code" : "E003",
        "emp_name" : "Kim Nail",
        "date_of_join" : "25/12/2010",
        "salary" : 8000
}
{
        "_id" : ObjectId("553f3c20eff0e6345e7c95ea"),
        "emp_code" : "E004",
        "emp_name" : "Kim Nail",
        "date_of_join" : "16/10/2010",
        "salary" : "8000"
}

Пример: $ project - включить определенные поля в выходные документы

Следующий командный этап включает в себя только поля _id, emp_code и emp_name в своих выходных документах:


db.empmast.aggregate( [ { $project : { emp_code : 1 , emp_name : 1 } } ] );

Выход:

 > db.empmast.aggregate ([{$ project: {emp_code: 1, emp_name: 1}}]);
{"_id": ObjectId ("553f35a0eff0e6345e7c95e7"), "emp_code": "E001", "emp_name": "Alex kon"}
{"_id": ObjectId ("553f35d1eff0e6345e7c95e8"), "emp_code": "E002", "emp_name": "Peter Dex"}
{"_id": ObjectId ("553f39edeff0e6345e7c95e9"), "emp_code": "E003", "emp_name": "Kim Nail"}
{"_id": ObjectId ("553f3c20eff0e6345e7c95ea"), "emp_code": "E004", "emp_name": "Kim Nail"}

Пример: $ project - подавить поле _id в выходных документах

Следующая команда исключает поле _id, но включает поля emp_code и emp_name в своих выходных документах:

> db.empmast.aggregate( [ { $project : { _id: 0, emp_code : 1 , emp_name : 1 } } ] );

Выход :

 > db.empmast.aggregate ([{$ project: {_id: 0, emp_code: 1, emp_name: 1}}]);
{"emp_code": "E001", "emp_name": "Alex kon"}
{"emp_code": "E002", "emp_name": "Peter Dex"}
{"emp_code": "E003", "emp_name": "Kim Nail"}
{"emp_code": "E004", "emp_name": "Kim Nail"}

Пример: $ project - для включения определенных полей из встроенных документов

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

{
        "_id" : ObjectId("5541ffb465713ddc838b2dc7"),
        "emp_code" : "E005",
        "emp_name" : "Alan Hogg",
        "date_of_join" : "15/09/2013",
        "salary" : 9000,
        "deduction" : {
                "pf" : 2000,
                "pt" : 300,
                "it" : 200
        }
}
{
        "_id" : ObjectId("5542003c65713ddc838b2dc8"),
        "emp_code" : "E006",
        "emp_name" : "Karlos Mint",
        "date_of_join" : "23/05/2010",
        "salary" : 12000,
        "deduction" : {
                "pf" : 3000,
                "pt" : 300,
                "it" : 400
        }
}
{
        "_id" : ObjectId("554200a065713ddc838b2dc9"),
        "emp_code" : "E007",
        "emp_name" : "Burg Hence",
        "date_of_join" : "27/08/2011",
        "salary" : 10000,
        "deduction" : 4000
}

Следующая команда включает только поле pf во встроенном документе в поле вычета, вы можете использовать точечную запись:

> db.empdetails.aggregate( [ { $project: { "deduction.pf": 1 } } ] );
or 
db.empdetails.aggregate( [ { $project: { deduction: { pf: 1 } } } ] );

Выход:

 > db.empdetails.aggregate ([{$ project: {"deduction.pf": 1}}]);
{"_id": ObjectId ("5541ffb465713ddc838b2dc7"), "deduction": {"pf": 2000}}
{"_id": ObjectId ("5542003c65713ddc838b2dc8"), "deduction": {"pf": 3000}}
{"_id": ObjectId ("554200a065713ddc838b2dc9")}

Пример: $ project - включить вычисляемые поля

Следующая команда добавляет новые поля date_of_join, PF и salary.

> db.empdetails.aggregate(
...    [
...       {
...          $project: {
...             emp_code: 1,
...             date_of_join: {
...                day: { $substr: [ "$date_of_join", 0, 2 ] },
...                month: { $substr: [ "$date_of_join", 3, 2 ] },
...                year: { $substr: [ "$date_of_join", 6, 4 ] },
...               },
...             PF: "$deduction.pf",
...             Salary: "$salary"
...          }
...       }
...    ]
... );

Выход :

 {"_id": ObjectId ("5541ffb465713ddc838b2dc7"), "emp_code": "E005", "date_of_join": {"day": "15", "month": "09", "year": "2013"}, "ПФ": 2000, "Зарплата": 9000}
{"_id": ObjectId ("5542003c65713ddc838b2dc8"), "emp_code": "E006", "date_of_join": {"day": "23", "month": "05", "year": "2010"}, "ПФ": 3000, "Зарплата": 12000}
{"_id": ObjectId ("554200a065713ddc838b2dc9"), "emp_code": "E007", "date_of_join": {"day": "27", "month": "08", "year": "2011"}, "Зарплата": 10000}

Предыдущий: Операторы агрегации трубопроводов
Далее: $ match

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


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code