我正在嘗試在 MongoDB 3.4 上進行查詢,在其中為陣列的一個特定元素添加一個欄位。物件示例:
{
"_id": 1,
"people": [
{
"name": "Jhon Smith",
"age": "30",
"state": "NY"
},{
"name": "Clint Mercer",
"age": "50",
"state": "NY"
},{
"name": "Walter Smith",
"age": "40",
"state": "WI"
}
]
}
我想進行一個查詢,我將在該檔案中添加一個屬性,其中包含名稱中帶有“Smith”的第一個人。例子:
{
"_id": 1,
"people": [
{
"name": "Jhon Smith",
"age": "30",
"state": "NY"
},{
"name": "Clint Mercer",
"age": "50",
"state": "NY"
},{
"name": "Walter Smith",
"age": "40",
"state": "WI"
}
],
"firstSmith": {
"name": "Jhon Smith",
"age": "30",
"state": "NY"
}
}
我已經有了我想要的檔案的 _id,但我不明白如何進行這樣的查詢。我正在嘗試使用聚合與“$match”作為 id 和“$addFields”之后,但我無法進行適用于該欄位的查詢以準確找到我想要的內容。我認為它類似于“findOne”查詢,但我找不到任何適用于“$addFields”的東西。
Obs:我不希望“firstSmith”是一個只有一個“人”的陣列,我希望它像示例中一樣。
我很感激這方面的一些幫助。
uj5u.com熱心網友回復:
$match- 過濾相關檔案$filterwith - 按名稱屬性$regexMatch過濾人員陣列arrayElemAt- 只獲取上述陣列的第一個元素$addFields- 添加具有上述結果值的新欄位
db.collection.aggregate([
{
"$match": {
"_id": 1
}
},
{
"$addFields": {
"firstSmith": {
"$arrayElemAt": [
{
"$filter": {
"input": "$people",
"cond": {
"$regexMatch": {
"input": "$$this.name",
"regex": "Smith"
}
}
}
},
0
]
}
}
}
])
作業示例
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/410203.html
標籤:
上一篇:如何映射和合并陣列的陣列的物件
下一篇:具有多個實體的RNG分發
