【问题标题】:MongoDB keep order with $in by using Async.js [duplicate]MongoDB 使用 Async.js 与 $in 保持顺序 [重复]
【发布时间】: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.jsmongoose-fill 一起使用,这不适用于aggregation

【问题讨论】:

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

标签: javascript mongodb async.js


【解决方案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
猜你喜欢
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
相关资源
最近更新 更多