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

如何查询MongoDB中未被其他文档children数组包含的文档ID?

获取未被其他文档children引用的分类文档

可以实现这个需求,下面提供两种可行的实现方式:

方式一:简洁查询(适合中小数据量)

先提取所有被其他文档children数组引用的ID,再筛选出ID不在该列表中的文档:

// 提取所有被引用的ID
const referencedIds = await CategoryModel.distinct("children");
// 查询未被引用的文档
const unReferencedCategories = await CategoryModel.find({
  _id: { $nin: referencedIds }
});

方式二:聚合管道(适合大数据量)

通过聚合管道一次性完成数据处理,避免多次查询的性能损耗:

const unReferencedCategories = await CategoryModel.aggregate([
  // 收集所有被引用的ID
  {
    $group: {
      _id: null,
      referencedIds: { $addToSet: { $each: "$children" } }
    }
  },
  // 关联原集合,对比筛选未被引用的ID
  {
    $lookup: {
      from: "categories", // 替换为你的实际集合名称
      let: { refs: "$referencedIds" },
      pipeline: [
        { $match: { $expr: { $not: { $in: ["$_id", "$$refs"] } } } }
      ],
      as: "unreferencedDocs"
    }
  },
  // 展开并输出结果
  { $unwind: "$unreferencedDocs" },
  { $replaceRoot: { newRoot: "$unreferencedDocs" } }
]);

注意事项

  • 方式一的distinct操作在数据量极大时可能存在性能瓶颈,此时优先选择聚合管道方案
  • 确保替换代码中categories为你的实际集合名称

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:50:06