使用關(guān)系型數(shù)據(jù)庫時(shí),用戶在select命令后添加字段名稱控制返回字段。mongodb中也支持對查詢返回字段的控制。默認(rèn)返回文檔的所有字段。為了限制返回?cái)?shù)據(jù)量,提高網(wǎng)絡(luò)傳輸速率。用戶可以通過投射(projection)來指定返回字段或在返回結(jié)果中排除一些字段。
構(gòu)建測試集合
與本系列其他文章一樣,首先構(gòu)建測試集合。插入測試集合的文檔,包含字符串類型的字段item和status, 嵌套文檔類型字段size,文檔數(shù)組類型字段instock.
//刪掉已有集合
//db.inventory.drop()
//創(chuàng)建新的集合
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 } ] }
]);
返回匹配文檔的所有字段
當(dāng)用戶并未向mongodb查詢語句指定任何投射規(guī)則時(shí),默認(rèn)返回所有字段。
下面的語句返回字段status是A的所有文檔字段
db.inventory.find({status: 'A'})
返回指定字段和_id字段
通過添加投射規(guī)則,用戶可以顯示的指定字段的返回規(guī)則。在投射規(guī)則中,當(dāng)字段名稱后面指定為1時(shí),該字段會被返回。當(dāng)向字段指定為0時(shí),該字段不會返回。_id字段,默認(rèn)返回。
投射規(guī)則的語法如下
db.collection.find(
{ //定義查詢條件
<field_name>: <value>,
...
},
{ //定義投射規(guī)則,設(shè)定字段是否返回
<field_name>: <0 or 1>,
...
}
)
下面語句中,返回item、status和_id字段
db.inventory.find({status: 'A'},{item: 1, status: 1})
隱藏_id字段
_id字段默認(rèn)是顯示的,需要隱藏字段時(shí),需要顯示的在投射規(guī)則中添加_id:0
如只返回item和status字段
db.inventory.find({status: 'A'},{item: 1, status: 1, _id: 0})
在此查詢語句中,定義了三個(gè)投射規(guī)則,item, status兩個(gè)字段顯示,_id字段隱藏。Mongodb在使用中規(guī)定,除了_id字段外,定義投射規(guī)則時(shí),不能同時(shí)定義字段顯示和隱藏。如用戶只能定義item和status字段全部顯示的{item: 1, status: 1}。不能定義item顯示,status字段隱藏的規(guī)則{item: 1, status: 0}。而用戶只能控制_id字段的隱藏,如{item: 1, status: 1, _id: 0}
隱藏某些字段
如前面描述,為字段名稱指定0值時(shí),隱藏該字段。該字段在查詢結(jié)果中不會返回。
如查詢中不返回status和instock字段
db.inventory.find({status: 'A'},{status: 0, instock: 0})
控制內(nèi)嵌文檔字段的顯示和隱藏
與查詢過濾文檔一直,用戶可以使用點(diǎn)操作符,構(gòu)建嵌套字段路徑,指定嵌套文檔中字段的顯示和隱藏。如下面的語句中,顯示size文檔中的uom字段
db.inventory.find({status: 'A'}, {item: 1, status: 1, "size.uom": 1})
同樣,不使用點(diǎn)號,寫成內(nèi)嵌文檔的方式,也是支持的。
db.inventory.find({status: 'A'}, {item: 1, status: 1, size: {uom: 1}})
而隱藏某些字段,只要將投射中的1改成0集合。
db.inventory.find({status: 'A'}, {size: {uom: 0}})
控制文檔數(shù)組中字段的顯示和隱藏
與嵌套文檔操作類似,使用點(diǎn)操作符也可以控制文檔數(shù)組中字段的顯示和隱藏。
如下面的語句中,返回字段item, status, 和數(shù)組instock中文檔的字段qty文章來源:http://www.zghlxwxcb.cn/news/detail-817221.html
db.inventory.find({status: 'A'}, {item: 1, status: 1, size: {uom: 1}, "instock.qty": 1})
除了控制文檔字段顯示以外, 使用投影,借助投影操作符,還可以控制數(shù)組元素的返回。詳見后續(xù)文檔。文章來源地址http://www.zghlxwxcb.cn/news/detail-817221.html
到了這里,關(guān)于Mongodb 控制查詢返回字段的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!