添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

从查询返回的项目字段

默认情况下,MongoDB的查询语句返回匹配到文档的所有字段,为了限制MongoDB返回给应用的数据,可以通过 projection 文档来指定或限制返回的字段。

本文提供了使用mongo shell中 db.collection.find() 方法映射查询的案例。案例中使用的 inventory 集合数据可以通过下面的语句产生。

db.inventory.insertMany( [
  { item: "journal", status: "A", size: { h: 14, w: 21, uom: "cm" }, instock: [ { warehouse: "A", qty: 5 } ] },
  { item: "notebook", status: "A",  size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "C", qty: 5 } ] },
  { item: "paper", status: "D", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "A", qty: 60 } ] },
  { item: "planner", status: "D", size: { h: 22.85, w: 30, uom: "cm" }, instock: [ { warehouse: "A", qty: 40 } ] },
  { item: "postcard", status: "A", size: { h: 10, w: 15.25, uom: "cm" }, instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);

返回匹配文档中的所有字段

如果没有特别指定 projection , db.collection.find() 方法将会返回匹配文档的所有字段。

下面的案例返回 inventory 集合中 status 等于**"A"**的文档的所有字段。

db.inventory.find( { status: "A" } )

上述操作等价于下面的标准SQL:

SELECT * from inventory WHERE status = "A"

仅返回指定字段和_id字段

映射会返回在映射文档中显示设置为 1 的字段。

下面的案例返回所有检索到文档中 item, status, _id 三个字段。

db.inventory.find( { status: "A" }, { item: 1, status: 1 } )

上述操作等价于下面的标准SQL:

SELECT _id, item, status from inventory WHERE status = "A"

去除_id字段

可以通过在映射文档中将 _id 字段设置为 0 来从结果集中去除 _id 字段,就像下面的例子:

db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )

上述操作等价于下面的标准SQL:

SELECT item, status from inventory WHERE status = "A"

Note:

除_id字段外,不能在映射文档中同时使用包含和去除语句。

去除指定字段

可以使用映射来排除特定字段,而不是在匹配文档中列出要返回的字段。

下面的案例返回匹配文档中除 status instock 字段之外的所有字段:

db.inventory.find( { status: "A" }, { status: 0, instock: 0 } )

Note:

除_id字段外,不能在映射文档中同时使用包含和去除语句。

返回嵌套文档中的指定字段

通过 点号 引用嵌套文档字段并且在映射文档中将该字段设置为 1 来实现返回嵌套文档中的指定字段。

下面的案例返回

  • _id 字段(默认返回)

  • item 字段

  • status 字段

  • 文档 size 中的 uom 字段

uom 字段是 size 嵌套文档中的字段.

db.inventory.find(