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

MongoDB子文档查询与更新需求:匹配零件990的操作

MongoDB 查询与更新操作方案

针对你提出的两个需求,我分别整理了对应的实现方法:

1. 查询parts值为990的对应cars数组

要精准获取所有parts包含990的子文档中的cars数组,推荐使用聚合管道来实现,这样可以精准筛选并返回目标数据:

db.your_collection_name.aggregate([
  // 将main_array数组拆分为单个子文档
  { $unwind: "$main_array" },
  // 匹配包含parts=990的子文档
  { $match: { "main_array.parts": 990 } },
  // 仅保留cars字段,排除默认的_id
  { $project: { _id: 0, cars: "$main_array.cars" } }
])

说明:

  • 如果需要严格匹配parts数组完全等于[990](而非包含990),可以把$match条件改成"main_array.parts": [990]
  • 执行后会返回所有符合条件的cars数组,你预期的"cars" : [ "Audi", "Ford" ]会包含在结果中

2. 更新包含parts=990的文档添加other_cars字段

这个需求需要先收集所有符合条件的cars数组,再批量更新目标文档。分两步执行:

步骤1:收集所有parts=990的cars数组及对应文档ID

// 执行聚合获取所有目标数据
const allTargetCars = db.your_collection_name.aggregate([
  { $unwind: "$main_array" },
  { $match: { "main_array.parts": 990 } },
  { $project: { _id: 1, cars: "$main_array.cars" } }
]).toArray();

步骤2:遍历更新每个目标文档

allTargetCars.forEach(doc => {
  // 筛选出当前文档之外的所有cars数组
  const otherCarsList = allTargetCars
    .filter(item => item._id.toString() !== doc._id.toString())
    .map(item => item.cars);
  
  // 更新当前文档,给对应子文档添加other_cars字段
  db.your_collection_name.updateOne(
    { _id: doc._id },
    { $set: { "main_array.$[elem].other_cars": otherCarsList } },
    { arrayFilters: [{ "elem.parts": 990 }] }
  );
});

说明:

  • arrayFilters用来精准定位main_array中parts=990的子文档,避免误更新其他子文档
  • 执行后,每个包含parts=990的子文档都会新增other_cars字段,值为其他文档中同条件的cars数组集合,和你给出的示例效果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:54:15