MongoDB 使用 Async.js 与 $in 保持顺序 [重复]

Posted

技术标签:

【中文标题】MongoDB 使用 Async.js 与 $in 保持顺序 [重复]【英文标题】:MongoDB keep order with $in by using Async.js [duplicate] 【发布时间】:2017-03-14 22:13:36 【问题描述】:

如你所知,$in: _id: [] 不遵守秩序。

我想为此目的使用 Async.js。

例如

const ids = [3,1,2]; // Initial ids, I get it from aggregation
const documents = [_id:1, _id:2, _id: 3]; // That's I get from MongoDB
const result = [_id:3, _id: 1, _id: 2] // That's I need 

如何使用 Async.js 执行此操作?我将mongoose.js 与mongoose-fill 一起使用,这不适用于aggregation

【问题讨论】:

收集所有结果然后只使用 JS sortBy 任何你喜欢的参数有什么问题? 我不太明白你的意思。就像我想的那样,我必须编写两个循环: var result = []; for(var i=0;i 检查我的答案。简单总是更好。也许我想念你的问题。但根据我所见,您需要对所有查询的结果进行排序。这可以在 JS 中完成。但是如果你想一个一个地查询每个id,然后对数组进行排序。我建议只使用一个查询。这大大提高了性能。 我已经收到了来自MongoDB的文档,但是顺序参数不匹配。我想对文档进行与参数数组完全相同的排序。 你见过***.com/questions/22797768/…吗?那里的答案有很多选择。 【参考方案1】:

这里不需要异步。自然 javascript 排序将帮助您解决此问题。

要查询 mongodb,只需使用这样的查询

_id : $in: [1,2,3] ;

当你收到这样的结果时

const documents = [_id:1, _id:2, _id: 3];

现在你可以运行简单的排序

let result = documents.sort((a, b) => a._id < b._id);

console.log(result);

会按 id 降序排序。

[_id:3, _id: 2, _id: 1];

希望这会有所帮助。

【讨论】:

不,不,不.. 我想用 id 映射文档。帖子不正确的示例。我找到了解决方案this

以上是关于MongoDB 使用 Async.js 与 $in 保持顺序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 中的结果顺序与 $in 类似 MySQL field('_id', ...)

MongoDB 中的结果顺序与 $in 类似 MySQL field('_id', ...)

对 MongoDB $in 查询的响应顺序? [复制]

对 MongoDB $in 查询的响应顺序? [复制]

Install MongoDB in Ubuntu 16.04 LTS

在mongodb中使用“in”