Оператор этапов агрегации MongoDB - $ проект
Описание
Функция $ 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 программирования