我有一個收藏people。它有一個陣列欄位numbers,其中每個檔案在所述陣列中都有不同數量的元素。
我的目標是將元素保留在第 0 個索引中并遞回洗掉其余元素。我怎么能這樣做呢?
例如:
{_id: 1, numbers: [100, 200, 300]}, -> {_id: 1, numbers: [100]},
{_id: 2, numbers: [101, 201]}, -> {_id: 2, numbers: [101]}
{_id: 3, numbers: [102, 202, 400, 500]}, -> {_id: 3, numbers: [102]},
uj5u.com熱心網友回復:
@R2D2 的替代解決方案是使用$slice. 與, 不同$first,$slice適用于多個元素。
collection.updateMany(
{},
{ $push: { numbers: { $each: [], $slice: 1 } } }
);
您也可以使用$slice: -1從最后一個元素開始。
在Mongo Playground上看到這個。
uj5u.com熱心網友回復:
您可以在更新管道中使用運算子$first,如下所示:
db.collection.update({},
[
{
$addFields: {
numbers: {
$first: "$numbers"
}
}
}
],
{
multi: true
})
解釋:
將所有檔案中的“numbers”陣列替換為僅第一個元素取自“numbers”的陣列
操場
如果您希望“數字”仍然是陣列型別,您可以將 $first 的輸出括在方括號 [] 中,如下所示:
numbers: [{
$first: "$numbers"
}]
游樂場 2
順便說一句, $first 是$arrayElemAt的別名,您可以使用它從陣列中提取其他元素...
但是,正如@Clashsoft 前面提到的,可以通過 $slice 完成操作
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479379.html
標籤:mongodb
上一篇:如何在Mongo中使用$or在$switch陳述句中執行$match
下一篇:MongoDB-分組并找到前N個
