[英]How do I use $map in a MongoDB $projection
我有一個包含以下文檔的數據庫:
{
_id: 123,
metrics: [{
_id: ObjectID(…),
name: 'foo',
steps: [1, 2, 3, …],
values: [10, 12, 13, …]
},
{
_id: ObjectID(…),
name: 'bar',
steps: [1, 2, 3, …],
values: [1.2, 1.2, 1.3, …]
},
]
}
現在我的目標是檢索所有文檔,但$map
所有數組條目到它們的name
屬性,丟棄其他字段。 我以為我可以這樣做:
pipeline = [{'$project': {'metrics': {'$map': {'input': '$metrics', 'in': '$this.name'}]
results = client.db.runs.aggregate(pipeline)
但是結果對於每個數組條目( {'metrics': [None, None, None, …]}
)只有None
值,就好像請求的字段name
不存在一樣。 但確實如此。 我也嘗試過使用 id 字段,但無濟於事。 我可以在檢查數據時看到字段在那里。 我無法弄清楚我在這里做錯了什么。
里面的$地圖,您可以使用as
定義臨時變量將從您的代表單個文檔metrics
,然后引用變量in
組成部分。
db.col.aggregate([{'$project': {'metrics': {'$map': {'input': '$metrics', as: 'metric', 'in': '$$metric.name' } } } }])
或者你可以直接引用一個臨時變量this
db.col.aggregate([{'$project': {'metrics': {'$map': {'input': '$metrics', 'in': '$$this.name' } } } }])
問題是,每次使用單個美元符號時,都會引用在當前管道階段正在處理的文檔中定義的字段。 此外,您可以使用雙美元符號來引用一些可由$map
、 $filter
等運算符定義的變量。
您可以嘗試以下文檔的初始代碼:
{
_id: 123,
this: { name: "x" },
metrics: [{ }, { } ]
}
你會得到一個包含兩個x
值的數組,因為有兩個度量,但每次迭代都引用相同的this.x
值:
{ "_id" : 123, "metrics" : [ "x", "x" ] }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.