我的資料庫
{
"_id": {
"$oid": "ddfsfs"
},
"id": 3,
"parent_id": 6,
"translation":
[
{
"language": "en",
"desc": "prod detail",
"name": "example1"
},
{
"language": "tr",
"desc": "detaylar",
"name": "ornek1"
}
]
}
我想做這個:例如,只選擇英文欄位。如果它的最終形式只有英文欄位中的名稱和描述,可以嗎?如何?
{
"_id": {
"$oid": "ddfsfs"
},
"id": 3,
"parent_id": 6,
"desc": "prod detail",
"name": "example1"
}
或者資料庫可以是這樣的。再次只有英語欄位將保留
{
"_id": {
"$oid": "62189ffd81f6b6bb05d8d409"
},
"id": 7,
"parent_id": 8,
"en": {
"desc": "hii",
"name": "serial ethernet"
},
"tr": {
"desc": "merhaba",
"name": "seri ethernet"
}
}
請分享我在nestjs中使用的mongodb聚合代碼。謝謝!:)
uj5u.com熱心網友回復:
對于第一個資料庫模式,您需要一個管道,該管道將首先translation使用運算子過濾陣列$filter。這將回傳一個陣列,其中僅包含滿足過濾條件的檔案。所以運算式:
{ $filter: {
input: '$translation',
cond: { '$eq': ['$$this.language', 'en'] }
} }
產生結果
[
{
"language" : "en",
"desc" : "prod detail",
"name" : "example1
}
]
第二步是將上述檔案與您需要的頂級欄位合并,在這種情況下,您希望 _id、id 和 parent_id 欄位與上述合并。用于$mergeObjects此。
由于$mergeObjects需要檔案作為輸入,因此需要使用$arrayElemAtor$first運算子從前面$filter運算式中的陣列中獲取檔案,即
{ $arrayElemAt: [
{ $filter: {
input: '$translation',
cond: { '$eq': ['$$this.language', 'en'] }
} },
0
] }
要么$first
{ $first: {
$filter: {
input: '$translation',
cond: { '$eq': ['$$this.language', 'en'] }
}
} }
將回傳
{
"language" : "en",
"desc" : "prod detail",
"name" : "example1
}
現在您可以使用運算式
{
$mergeObjects: [
{ _id: "$_id", id: '$id', parent_id: "$parent_id" },
{ $arrayElemAt: [
{ $filter: {
input: '$translation',
cond: { '$eq': ['$$this.language', 'en'] }
} },
0
] }
]
}
要得到
{
"_id" : ObjectId("6218abb521d9a0dfecd02e4b"),
"parent_id" : 6.0,
"language" : "en",
"desc" : "prod detail",
"name" : "example1"
}
最后一步是用運算子和你的最終聚合管道替換根$replaceRoot試試下面的聚合管道(MongoDb Playground)應該是這樣的
{ $replaceRoot: {
newRoot: {
$mergeObjects: [
{ _id: "$_id", id: '$id', parent_id: "$parent_id" },
{ $arrayElemAt: [
{ $filter: {
input: '$translation',
cond: { '$eq': ['$$this.language', 'en'] }
} },
0
] }
]
}
} }
對于替代模式,運行這個聚合管道,只需將檔案與 en 鍵合并,即
{ $replaceRoot: {
newRoot: {
$mergeObjects: [
{ _id: "$_id", id: '$id', parent_id: "$parent_id" },
'$en'
]
}
} }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/432874.html
標籤:mongodb 筛选 mongodb查询 聚合框架 巢穴
