操纵MongoDB中引用数组中元素的顺序

时间:2016-02-12 23:11:23

标签: javascript arrays mongodb sorting database

我正致力于实施图像相册,并希望有一个优雅的解决方案来存储图像的顺序。 Album模型包含一系列对Images的引用,如下所示:

// Example album
{
    _id: 12345
    images: [ObjectId(1), ObjectId(2), ObjectId(3)]
}

// Example image
{
    _id: 1
    title: My Picture
    author: Me
}

我试图弄清楚如何处理数据库中的订单更新。例如,让我们说我想更新以下图像数组:

[ObjectId(1), ObjectId(2), ObjectId(3)]

[ObjectId(3), ObjectId(1), ObjectId(2)]

我想知道1)我是否可以通过更新直接重新组织引用数组,或者2)如果可以的话,我如何实际访问数组中的每个元素以指示新的顺序。< / p>

实际上,这个解决方案可能没用,因为可以异步填充数组。另一种解决方案是忽略我完全要求的内容,并按如下方式单独存储每个图像的顺序:

// Image
{
    _id: 1
    title: My Picture
    author: Me
    position: 2    // like this
}

这种方式当我异步拉下一组图像时,我所要做的就是按照每个图像的position字段进行排序。

此策略的缺点是,随着图像数量变得足够大,重新排序将变得非常昂贵。将100长度数组的最终元素移动到最开始需要更新数据库中每个图像的位置值。

如果您有任何建议,请与我们联系!

1 个答案:

答案 0 :(得分:1)

数组中元素的顺序与持久化时的顺序相同。

要更改顺序,请使用您喜欢的顺序更新阵列。 E.g:

db.album.update({_id:1}, {$set:{images:[ObjectId(3), ObjectId(1), ObjectId(2)]}});