免费建筑设计素材网站,网站的备案手续,有做美食的视频网站么,桐庐城乡建设局网站MongoDB CRUD操作#xff1a;投影Project详解 文章目录 MongoDB CRUD操作#xff1a;投影Project详解返回文档的全部字段返回指定的字段和_id字段不输出_id字段指定排除的字段返回内嵌文档中的指定字段禁止内嵌文档中的特定字段数组中内嵌文档的投影聚合表达式的投影字段 默认…MongoDB CRUD操作投影Project详解 文章目录 MongoDB CRUD操作投影Project详解返回文档的全部字段返回指定的字段和_id字段不输出_id字段指定排除的字段返回内嵌文档中的指定字段禁止内嵌文档中的特定字段数组中内嵌文档的投影聚合表达式的投影字段 默认情况下MongoDB查询返回文档中的所有字段通过project可以限制MongoDB发送到应用程序的文档的字段。
下面的示例使用mongosh的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 } ] }
]);返回文档的全部字段
如果不指定文档投影则db.collection.find()方法将返回匹配文档中的所有字段。下面的示例返回inventory集合中status为A的文档的全部字段
db.inventory.find( { status: A } )这个操作等价于SQL语句
SELECT * from inventory WHERE status A返回指定的字段和_id字段
在投影文档中将field设置为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除_id字段外不能在投影文档中同时指定输出和排除的字段。
指定排除的字段
可以使用投影来排除特定字段而不是列出要在匹配文档中返回的字段下面的示例返回匹配文档中除status和 instock字段之外的所有字段也就是排除这两个字段
db.inventory.find( { status: A }, { status: 0, instock: 0 } )返回内嵌文档中的指定字段
可以返回内嵌文档的特定字段使用点号.引用内嵌字段并在投影文档中设置为1。
下面的示例返回
_id字段默认返回item字段status字段size文档中的uom字段。uom字段仍然内嵌在size文档中。
db.inventory.find({ status: A },{ item: 1, status: 1, size.uom: 1 }
)还可以使用嵌套形式指定内嵌字段。例如
{ item: 1, status: 1, size: { uom: 1 } }禁止内嵌文档中的特定字段
可以使用点号.引用投影文档中的内嵌字段并设置为0来隐藏内嵌文档的特定字段。
下面的示例指定一个投影来排除size文档内的uom字段。所有其他字段都在匹配文档中返回
db.inventory.find({ status: A },{ size.uom: 0 }
)还可以使用嵌套形式指定内嵌字段。例如
{ size: { uom: 0 } }数组中内嵌文档的投影
使用点号.表示投影数组中内嵌文档的特定字段。
以下示例指定要返回的投影
_id 字段默认返回item字段status字段instock数组中内嵌文档的qty数量字段。
db.inventory.find( { status: A }, { item: 1, status: 1, instock.qty: 1 } )$elemMatch、$slice和$是投影特定元素以包含在返回的数组中的唯一方法。例如不能使用数组索引来投影特定的数组元素例如{ instock.0: 1 }投影不会用第一个元素投影数组。
聚合表达式的投影字段
可以在查询投影中指定聚合表达式。聚合表达式允许投影新字段并修改现有字段的值。
例如下面的操作使用聚合表达式覆盖status字段的值并投影新字段area和reportNumber。
db.inventory.find({ },{_id: 0,item: 1,status: {$switch: {branches: [{case: { $eq: [ $status, A ] },then: Available},{case: { $eq: [ $status, D ] },then: Discontinued},],default: No status found}},area: {$concat: [{ $toString: { $multiply: [ $size.h, $size.w ] } }, ,$size.uom]},reportNumber: { $literal: 1 }}
)输出结果
[{item: journal,status: Available,area: 294 cm,reportNumber: 1},{item: planner,status: Discontinued,area: 685.5 cm,reportNumber: 1},{item: notebook,status: Available,area: 93.5 in,reportNumber: 1},{item: paper,status: Discontinued,area: 93.5 in,reportNumber: 1},{item: postcard,status: Available,area: 152.5 cm,reportNumber: 1}
]