我们在进行查询的时候,经常会有这样的场景: 只需要查询出满足条件的document中某些fields,我们不需要全量的document数据。这时我们只需要指定MongoDB需要返回的的fields即可。
用法如下: db.collection.find(<query document>, <projection document>),我们需要自己按照自己的需求补充<projection document>,告诉MongoDB我们需要哪些fields,在<projection document>中当我们为field指定至为1时那么MongoDB就返回这个field,当我们指定field值为0时,就排除这个field,MongoDB不再返回这个field.
: 1 to include a field in the returned documents
: 0 to exclude a field in the returned documents
样例
准备数据
think_db> db.user.insertMany([ {'username':'andy','password':'tertert','gender':'male'}, {'username':'jessy','password':'jfhrtyrt','gender':'famale'}, {'username':'tom','password':'jtjtyjty','gender':'male'}])
实际测试
- 只返回username和gender
think_db> db.user.find({},{"username":1,"gender":1})
[
{
_id: ObjectId("61cdb6e5405f19799112626e"),
username: 'andy',
gender: 'male'
},
{
_id: ObjectId("61cdb6e5405f19799112626f"),
username: 'jessy',
gender: 'famale'
},
{
_id: ObjectId("61cdb6e5405f197991126270"),
username: 'tom',
gender: 'male'
}
]
MongoDB中每个document里面的_id是默认返回的,如果你需要排除它,就需要设置为0
You do not have to specify the _id field to return the field. It returns by default.
To exclude the field, set it to 0 in the projection document.
think_db> db.user.find({},{"_id":0,"username":1,"gender":1})
[ { username: 'andy', gender: 'male' }, { username: 'jessy', gender: 'famale' }, { username: 'tom', gender: 'male' }]
我们可以只排除某个field,比如password
think_db> db.user.find({},{"password":0})
[
{
_id: ObjectId("61cdb6e5405f19799112626e"),
username: 'andy',
gender: 'male'
},
{
_id: ObjectId("61cdb6e5405f19799112626f"),
username: 'jessy',
gender: 'famale'
},
{
_id: ObjectId("61cdb6e5405f197991126270"),
username: 'tom',
gender: 'male'
}
]