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 }