javascript - mongoose - 对每个数组元素执行查询

标签 javascript node.js mongodb mongoose

我有一个数组array = [key1, key2, ..., keyn]

我有一个架构:{ key : String, value : String }

我想获取一个包含与键关联的值的数组 ([value_linked_to_key1, ...])。

最佳答案

async library非常适合这些情况。当您有一个数组并希望它生成另一个数组,其中各个元素之间存在某种关系时,通常使用 .map。

var async = require('async');

async.map(array, function (key, next) {
  // Do a query for each key
  model.findOne({ key: key }, function (err, result) {
    // Map the value to the key
    next(err, result.value);
  });
},
function (err, result) {
  console.log(result); // [value1, value 2, ...]
});

如果您有很多键,async.map 可能会导致服务器过载,因为它并行调用每个请求。如果是这样,您可以使用 async.eachSeries。

更新

当然,也可以对所有值进行一次查询:

model.find({ key: { $in: array } }, function (err, result) {
  result = result.map(function (document) {
    return document.value;
  });
});

结果现在是一个值数组。但是它不能保证它们与键的顺序相同。如果键已排序,则可以执行.find().sort({ key: 1 }).exec(callback)。否则,您必须随后将其与键数组进行比较,这可能效率低下(但仍然比查询每个键更快)。

关于javascript - mongoose - 对每个数组元素执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18672601/

相关文章:

javascript - 在 Node 环境中 stub jQuery.ajax (jQuery 2.x)

javascript - 无法获取要清除的文件类型输入

JavaScript DOM childNodes.length 也返回文本节点的数量

javascript - 我可以在 emberjs 中给 View 一个显示动画吗

php - 在 php 中统计 mongodb

node.js - findAndModify MongoDB 在数组开头插入元素

java - 继续玩框架 - 我在这里犯了什么愚蠢的错误?

javascript - 使用javascript在特定位置打印文本

node.js - 使用 fluent-ffmpeg node.js 模块的流式视频错误

javascript - 使用 libssh 从消息中提取 SSH 公钥