【问题标题】:How to make sure Mongoose keeps the order of an array?如何确保 Mongoose 保持数组的顺序?
【发布时间】:2020-06-01 15:19:32
【问题描述】:

我有一个数组: ["wordswordswords", "somewords", "otherwords"] 我正在尝试将其更新为 mongoose 文档,使用:

Collection.findOne({ criteria: value }, (err, res) => {
  res.value = array;
  res.save();
});

它很好地保存了数组,但是,数组是按字母顺序排序的。这样,从这里:

["wordswordswords", "somewords", "otherwords"]

我明白了:

["otherwords", "somewords", "wordswordswords"]

在数据库中。

在这种情况下,数组顺序对我很重要。

【问题讨论】:

  • 如果 mongo 不保证数组顺序,你可以将它保存为从索引到值的映射,并在加载数据时重建数组,即res.value = array.reduce((o, x, i) => { o[i] = x; return o }, {})
  • 嗨!感谢闪电般的快速响应。这是解决问题的一种有趣方式,我将尝试在我的代码中实现它,尽管这需要很多时间,因为我已经准备好在很多地方将它作为一个数组。无论如何,一个简单的键循环+获取该键的值就可以了。
  • 你确定排序是在存档时进行的吗?它可能只对检索进行排序(您可以控制)。
  • 另外,你能给我一个快速整洁的方法来重建数组吗?
  • @terrymorse 是的,它发生在保存时。甚至在检索数据之前,它就在 Compass 应用程序中随机播放。

标签: javascript arrays node.js mongodb mongoose


【解决方案1】:

通过@wbadart 找到答案。

关键是将数组映射到一个对象:

foo.value = bar.reduce((o, x, i) => { o[i] = x; return o }, {})

所以从类似的数组中:["wordswordswords", "somewords", "otherwords"] 我得到{'0': "wordswordswords", '1': "somewords", '2': "otherwords"}。

然后,将有序对象重构为数组就很简单了。

【讨论】:

    猜你喜欢
    • 2015-05-23
    • 2017-10-23
    • 2019-05-18
    • 2023-03-10
    • 1970-01-01
    • 2020-04-17
    • 2020-06-09
    • 2019-10-06
    相关资源
    最近更新 更多