You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose使用$in查询ID数组时如何保留重复ID对应的多份文档?

Mongoose $in查询重复ID返回对应重复文档及总价计算方案

MongoDB的$in查询本身自带查询条件去重逻辑,同一ID无论出现多少次只会返回一次对应文档,无需循环调用find发起多次数据库请求,仅需一次查询后基于原始ID数组做映射即可满足需求:

const arrOfIds = reqBody.items.map(item => item.productId);

// 仅发起一次数据库查询获取所有去重商品文档
Product.find({ '_id': { $in: arrOfIds } }, (error, result) => {
  if (error) {
    // 自行处理异常逻辑
    return console.error(error)
  }
  // 构建ID到商品文档的映射表,加toString()避免ObjectId和字符串ID匹配失败
  const productMap = new Map(result.map(product => [product._id.toString(), product]))
  // 按原始ID数组的顺序、重复情况生成对应商品列表
  const productList = arrOfIds.map(id => productMap.get(id.toString()))
  // 直接计算包含重复ID的商品总价,可根据需求调整字段名
  const totalPrice = productList.reduce((sum, product) => sum + (product?.price || 0), 0)
})

方案优势:

  • 仅发起一次数据库请求,性能远高于循环调用find的实现
  • 完全保留原始ID数组的顺序和重复次数,productList长度和arrOfIds完全一致
  • 逻辑独立,和其他业务代码耦合度低,可直接封装为通用工具函数
  • 无需额外依赖,可兼容所有Mongoose版本

内容的提问来源于stack exchange,提问作者quielfala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:45:03