【发布时间】: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