Một truy vấn chiếu là một truy vấn trong đó bạn chỉ định trường nào sẽ được trả về.
Trong MongoDB, khi bạn truy vấn một tập hợp bằng db.collection.find() , bạn có thể chỉ định trường nào bạn muốn trả về.
Bạn có thể thực hiện việc này bằng cách đưa tên trường vào truy vấn của mình và thêm 1 hoặc 0 bên cạnh chúng, để chỉ định xem nó có nên được trả lại hay không. Đây là phép chiếu tham số. Tham số chiếu của 1 sẽ hiển thị trường và một 0 sẽ ẩn nó.
Ví dụ
Trước tiên, hãy thực hiện một truy vấn không có phép chiếu (để chúng tôi có thể xem có bao nhiêu trường được trả về):
Không có phép chiếu
db.musicians.find( { instrument: "Vocals"} ) Kết quả:
{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
Với phép chiếu
Bây giờ, hãy sử dụng phép chiếu để chỉ hiển thị tên lĩnh vực:
db.musicians.find( { instrument: "Vocals" }, { name: 1 } ) Kết quả:
{ "_id" : 1, "name" : "Ian Gillan" }
{ "_id" : 6, "name" : "Jeff Martin" }
Bạn sẽ nhận thấy rằng _id trường được tự động đưa vào, ngay cả khi bạn không chỉ định nó. Bạn có thể loại trừ trường này bằng cách sử dụng 0 chống lại nó:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, name: 1 } ) Kết quả:
{ "name" : "Ian Gillan" }
{ "name" : "Jeff Martin" }
Kết hợp các loại bao gồm và loại trừ
Bạn không thể kết hợp 1 s và 0 s (ngoại trừ _id đồng ruộng). Nếu bạn cố gắng kết hợp các loại bao gồm và loại trừ, như sau:
db.musicians.find( { instrument: "Vocals" }, { name: 1, born: 0 } ) Bạn sẽ gặp phải lỗi này:
Error: error: {
"waitedMS" : NumberLong(0),
"ok" : 0,
"errmsg" : "Projection cannot have a mix of inclusion and exclusion.",
"code" : 2
}
Vì vậy, đối với bạn, hãy bao gồm các trường hoặc loại trừ chúng - không phải cả hai.
Dưới đây là một ví dụ về việc chỉ định các trường bằng cách loại trừ:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, instrument: 0 } ) Kết quả:
{ "name" : "Ian Gillan" }
{ "name" : "Jeff Martin", "born" : 1969 }