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

MongoDB如何查询与指定编辑器link属性一致的关联所有者数据

实现方案

基础查询(仅返回关联作曲人数据)

你可以使用MongoDB聚合管道实现需求,指定编辑器codigo_ecad为5546730的查询语句如下:

db.works.aggregate([
  // 第一步:过滤包含目标编辑器的作品
  { $match: { 'pro_owners.codigo_ecad': 5546730 } },
  // 第二步:展开所有者数组
  { $unwind: '$pro_owners' },
  // 第三步:分组获取目标编辑器对应的所有link值,同时收集所有所有者待后续筛选
  {
    $group: {
      _id: '$_id',
      target_links: {
        $addToSet: {
          $cond: [
            { $eq: ['$pro_owners.codigo_ecad', 5546730] },
            '$pro_owners.link',
            null
          ]
        }
      },
      all_owners: { $push: '$pro_owners' }
    }
  },
  // 第四步:过滤掉空的link值
  {
    $addFields: {
      target_links: {
        $filter: {
          input: '$target_links',
          cond: { $ne: ['$$this', null] }
        }
      }
    }
  },
  // 第五步:展开所有所有者,筛选匹配link且为作曲人类别的用户
  { $unwind: '$all_owners' },
  {
    $match: {
      $expr: { $in: ['$all_owners.link', '$target_links'] },
      'all_owners.category': 'CA', // 作曲人标识,可根据实际字段规则调整
      'all_owners.codigo_ecad': { $ne: 5546730 } // 排除编辑器本身
    }
  },
  // 第六步:按codigo_ecad去重,获取唯一所有者
  { $group: { _id: '$all_owners.codigo_ecad', owner_info: { $first: '$all_owners' } } },
  // 第七步:调整输出格式
  { $replaceRoot: { newRoot: '$owner_info' } },
  // 可选:和原查询保持一致的排序分页规则
  { $sort: { _id: -1 } },
  { $limit: 100 }
])

上述查询会直接返回符合要求的唯一作曲人列表,和你示例期望的输出结构完全一致。

加分实现:关联owners集合获取完整数据

只需要在上述聚合管道的末尾追加$lookup阶段即可:

// 在上面的聚合管道最后添加如下阶段
{
  $lookup: {
    from: 'owners', // 要关联的集合名称
    localField: 'codigo_ecad', // 当前查询结果中所有者的关联字段
    foreignField: 'codigo_ecad', // owners集合的关联字段,可根据实际字段规则调整
    as: 'full_owner_info'
  }
},
// 可选:展开关联结果,调整输出结构
{ $unwind: '$full_owner_info' }

说明

如果你的业务中作曲人标识不是CA,或者关联字段有差异,直接替换对应过滤条件即可,整体管道逻辑无需调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 21:54:04