заявка за проекция е заявка, в която посочвате кои полета трябва да бъдат върнати.
В 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 }