MongoDB 基本操作 过滤返回的field

394 阅读2分钟

我们在进行查询的时候,经常会有这样的场景: 只需要查询出满足条件的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'}])

实际测试

  1. 只返回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'
  }
]