新聞中心
在MongoDB中,我們可以使用$convert操作符將一個(gè)字段的值轉(zhuǎn)換為枚舉類型,這在我們需要對(duì)某個(gè)字段的值進(jìn)行嚴(yán)格的控制時(shí)非常有用,下面是一個(gè)詳細(xì)的示例:

創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元泰安做網(wǎng)站,已為上家服務(wù),為泰安各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
1、我們需要定義一個(gè)枚舉集合,在這個(gè)集合中,我們將存儲(chǔ)所有可能的枚舉值及其對(duì)應(yīng)的描述,我們可以創(chuàng)建一個(gè)名為status的集合,其中包含以下文檔:
{
"_id": "active",
"description": "用戶處于活動(dòng)狀態(tài)"
},
{
"_id": "inactive",
"description": "用戶處于非活動(dòng)狀態(tài)"
}
2、我們可以在需要進(jìn)行枚舉轉(zhuǎn)換的集合上創(chuàng)建一個(gè)$convert操作符,在這個(gè)操作符中,我們需要指定要轉(zhuǎn)換的字段名、枚舉集合的名稱以及用于匹配枚舉值的字段名,假設(shè)我們有一個(gè)名為users的集合,其中包含一個(gè)名為userStatus的字段,我們可以使用以下查詢來(lái)將其轉(zhuǎn)換為枚舉類型:
db.users.aggregate([
{
$project: {
userStatus: { $convert: { input: "$userStatus", to: "status", onNull: "UNKNOWN", onError: "ERROR" } }
}
}
])
在這個(gè)示例中,我們使用了以下參數(shù):
input:要轉(zhuǎn)換的字段名,即userStatus。
to:枚舉集合的名稱,即status。
onNull:當(dāng)輸入值為null時(shí)使用的默認(rèn)值,這里我們?cè)O(shè)置為UNKNOWN。
onError:當(dāng)轉(zhuǎn)換過(guò)程中發(fā)生錯(cuò)誤時(shí)使用的默認(rèn)值,這里我們?cè)O(shè)置為ERROR。
3、我們可以使用聚合管道將轉(zhuǎn)換后的枚舉值替換回原始文檔中的字段值,我們可以使用以下查詢來(lái)實(shí)現(xiàn)這一點(diǎn):
db.users.aggregate([
{
$lookup: {
from: "status",
localField: "userStatus",
foreignField: "_id",
as: "userStatusInfo"
}
},
{
$unwind: "$userStatusInfo"
},
{
$project: {
_id: 1,
userStatus: "$userStatusInfo._id",
userStatusDescription: "$userStatusInfo.description"
}
},
{
$replaceRoot: { newRoot: "$userStatusInfo" }
}
])
在這個(gè)示例中,我們使用了以下步驟:
$lookup:使用$lookup操作符從枚舉集合中查找與輸入值匹配的文檔,我們將原始文檔中的userStatus字段作為本地字段,將枚舉集合中的_id字段作為外部字段,我們將查找到的文檔存儲(chǔ)在名為userStatusInfo的新數(shù)組中。
$unwind:使用$unwind操作符將數(shù)組拆分為多個(gè)文檔,這樣,每個(gè)文檔都將包含一個(gè)與輸入值匹配的枚舉文檔。
$project:使用$project操作符選擇我們想要保留的字段,在這里,我們選擇了_id、新的枚舉值(即userStatusInfo._id)以及枚舉值的描述(即userStatusInfo.description)。
$replaceRoot:使用$replaceRoot操作符將數(shù)組中的每個(gè)元素替換為一個(gè)新的根文檔,這樣,每個(gè)文檔都將只包含一個(gè)枚舉文檔。
文章題目:mongodb枚舉convert
文章源于:http://www.dlmjj.cn/article/dhopcdp.html


咨詢
建站咨詢
