如何删除数组中除第一个索引之外的所有内容?
How to delete everything in an array except the first index?
我有一个collectionpeople
。它有一个数组字段 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]},
您可以在更新管道中使用运算符 $first,如下所示:
db.collection.update({},
[
{
$addFields: {
numbers: {
$first: "$numbers"
}
}
}
],
{
multi: true
})
解释:
将所有文档中的“numbers”数组替换为仅包含取自“numbers”的第一个元素的数组
如果您希望“数字”仍然是数组类型,您可以将 $first 的输出括在方括号 [] 中,如下所示:
numbers: [{
$first: "$numbers"
}]
顺便说一句,$first 是 $arrayElemAt 的别名,您可以使用它从数组中提取其他元素 ...
但是当然可以通过@Clashsoft
之前提到的$slice来完成操作
@R2D2 的替代解决方案是使用 $slice
。与 $first
不同,$slice
适用于多个元素。
collection.updateMany(
{},
{ $push: { numbers: { $each: [], $slice: 1 } } }
);
您也可以使用 $slice: -1
从最后一个元素开始。
在 Mongo Playground 上看到这个。
我有一个collectionpeople
。它有一个数组字段 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]},
您可以在更新管道中使用运算符 $first,如下所示:
db.collection.update({},
[
{
$addFields: {
numbers: {
$first: "$numbers"
}
}
}
],
{
multi: true
})
解释:
将所有文档中的“numbers”数组替换为仅包含取自“numbers”的第一个元素的数组
如果您希望“数字”仍然是数组类型,您可以将 $first 的输出括在方括号 [] 中,如下所示:
numbers: [{
$first: "$numbers"
}]
顺便说一句,$first 是 $arrayElemAt 的别名,您可以使用它从数组中提取其他元素 ...
但是当然可以通过@Clashsoft
之前提到的$slice来完成操作@R2D2 的替代解决方案是使用 $slice
。与 $first
不同,$slice
适用于多个元素。
collection.updateMany(
{},
{ $push: { numbers: { $each: [], $slice: 1 } } }
);
您也可以使用 $slice: -1
从最后一个元素开始。
在 Mongo Playground 上看到这个。