заявка за проекция е заявка, в която посочвате кои полета трябва да бъдат върнати.
В MongoDB, когато правите заявка за колекция с помощта на db.collection.find() метод, можете да посочите кои полета искате да върнете.
Можете да направите това, като включите имената на полетата във вашата заявка и добавите 1 или 0 до тях, за да посочите дали трябва да се върне или не. Това е проекция параметър. Проекционен параметър от 1 ще покаже полето и 0 ще го скрие.
Пример
Първо нека направим заявка без проекция (за да можем да видим колко полета са върнати):
Без проекция
db.musicians.find( { instrument: "Vocals"} ) Резултат:
{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
С проекция
Сега нека използваме проекция, за да покажем само име поле:
db.musicians.find( { instrument: "Vocals" }, { name: 1 } ) Резултат:
{ "_id" : 1, "name" : "Ian Gillan" }
{ "_id" : 6, "name" : "Jeff Martin" }
Ще забележите, че _id полето се включва автоматично, дори и да не го посочите. Можете да изключите това поле, като използвате 0 срещу него:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, name: 1 } ) Резултат:
{ "name" : "Ian Gillan" }
{ "name" : "Jeff Martin" }
Смесване на включвания и изключения
Не можете да смесвате 1 s и 0 s (с изключение на _id поле). Ако се опитате да смесите включвания и изключения, по следния начин:
db.musicians.find( { instrument: "Vocals" }, { name: 1, born: 0 } ) В крайна сметка ще получите тази грешка:
Error: error: {
"waitedMS" : NumberLong(0),
"ok" : 0,
"errmsg" : "Projection cannot have a mix of inclusion and exclusion.",
"code" : 2
}
Така че или включете полета, или ги изключете – не и двете.
Ето пример за посочване на полета чрез изключване:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, instrument: 0 } ) Резултат:
{ "name" : "Ian Gillan" }
{ "name" : "Jeff Martin", "born" : 1969 }