【发布时间】:2020-11-02 14:09:06
【问题描述】:
有没有办法获取 MongoDB 中最后一个匹配元素的索引?我说的是相当于 JavaScript 的Array.prototype.lastIndexOf。我知道$indexOfArray,但我正在寻找最后一个索引,而不是第一个。
我的用例
我有一个集合,其架构如下所示:
{
// ...
images: [
{
identifier: String,
imageId: ObjectId
}
]
// ...
}
我有一条记录,其中有重复的元素:
{
// ...
images: [
{
identifier: '0',
imageId: ObjectId('objectId0')
},
{
identifier: '1',
imageId: ObjectId('objectId1')
},
{
identifier: '2',
imageId: ObjectId('objectId2')
},
{
identifier: '0', // <-- duplicated!
imageId: ObjectId('objectId3')
},
// many more elements...
{
identifier: '0', // last occurence
imageId: ObjectId('objectIdN+0')
},
{
identifier: '1',
imageId: ObjectId('objectIdN+1')
},
{
identifier: '2',
imageId: ObjectId('objectIdN+2')
}
]
}
我想删除最后一次出现 images.identifier: '0' 之前的所有元素。
不使用 JavaScript 有可能吗?
【问题讨论】:
-
您可以使用聚合管道获取所有重复的 IDS,除了最后一个使用 $limit 和 $skip。获得 ID 后,您可以使用 ObjectID 删除它们。
-
@Hiren 但是,我究竟如何获得直到最后一个副本的所有元素数量?我需要将一个非常具体的值传递给
$limit -
以下是您可以进一步思考的一些想法:Find duplicate urls in mongodb。
-
您要删除“所有在
images.identifier: '0'后面”还是“所有重复的标识符”?
标签: javascript mongodb