📜  仅在 mongodb 中获取文档的某些字段 (1)

📅  最后修改于: 2023-12-03 15:06:28.629000             🧑  作者: Mango

仅在 MongoDB 中获取文档的某些字段

在进行 MongoDB 数据库查询时,有时候我们只需要获取文档中的某些字段,而不需要获取所有字段。这样可以降低网络传输的开销以及减少数据的处理量,从而提升查询性能。

在 MongoDB 中,可以使用投影(Projection)来指定要返回的字段。投影可以应用于 find()findOne() 方法中。

语法
db.collection.find(<query>, <projection>)
db.collection.findOne(<query>, <projection>)

其中:

  • <query>:查询条件,与普通查询一样;

  • <projection>:投影字段,指定要返回的字段,可以使用以下两种方式:

    • 直接在 {} 中列出需要返回的字段,如 { field1: 1, field2: 1 },其中 1 表示返回该字段,0 则表示不返回;
    • 将要返回的字段置为 1,需要排除的字段置为 0,如 { field1: 1, field2: 0 },表示只返回 field1,不返回 field2
示例

假设有一个 users 集合,文档结构如下:

// users 集合
{
  "_id": ObjectId("5e8b20c902f5ae1a82089351"),
  "name": "张三",
  "age": 20,
  "gender": "男"
}

要仅返回 namegender 两个字段,可以使用以下代码:

db.users.find({}, { name: 1, gender: 1 })

返回结果如下:

[
  { "_id": ObjectId("5e8b20c902f5ae1a82089351"), "name": "张三", "gender": "男" },
  { "_id": ObjectId("5e8b20ce02f5ae1a82089352"), "name": "李四", "gender": "女" },
  { "_id": ObjectId("5e8b20d202f5ae1a82089353"), "name": "王五", "gender": "男" }
]

如果不需要返回 age 字段,可以将其置为 0,如下所示:

db.users.find({}, { age: 0 })

返回结果如下:

[
  { "_id": ObjectId("5e8b20c902f5ae1a82089351"), "name": "张三", "gender": "男" },
  { "_id": ObjectId("5e8b20ce02f5ae1a82089352"), "name": "李四", "gender": "女" },
  { "_id": ObjectId("5e8b20d202f5ae1a82089353"), "name": "王五", "gender": "男" }
]
总结

在 MongoDB 中,使用投影可以轻松地仅返回文档中的某些字段,而不需要返回所有字段。这样可以提升查询性能,减少网络传输的开销。在使用时,需要注意投影语法的正确性,以及需要投影哪些字段,需要排除哪些字段。