猫鼬聚合反向查找或没有localField的查找[重复]

Posted

技术标签:

【中文标题】猫鼬聚合反向查找或没有localField的查找[重复]【英文标题】:mongoose aggregation reverse lookup or lookup without localField [duplicate] 【发布时间】:2020-12-01 11:09:57 【问题描述】:

我想在 Plan Schema 上运行聚合并获取具有引用 ID planId 的反馈。 但是,如果我想填充查找,我需要 Plan 中的参考 ID,但我不喜欢这种保存参考 ID 的策略,我喜欢将所有内容分开。

有什么方法可以在没有参考 ID 的情况下进行填充。

类似的东西。但它不起作用。

const pipe = [

  $lookup: 
    from: 'Feedbacks',
    pipeline: [
       
        $match:  
          planId: '$_id'
        
      
    ],
    as: 'feedback'
  
]
await Plan.aggregate(pipe);
export interface Plan 
  _id: ObjectId;
  ...


export interface Feedback 
  planId: ObjectId;
  ...


【问题讨论】:

【参考方案1】:

我找到了答案。对于其他人:


  from: 'Feedbacks',
  let:  planIdInPlan:"$_id",
  pipeline: [
              
                $match: 
                  $expr:
                  
                    $eq:['$planId', '$$planIdInPlan'] 
                  
                
                
            ],
  as: 'feedback'

【讨论】:

只是一个问题,速度慢,性能差是不是很糟糕?还是从正确的方式查找会更好(在反馈集合上运行聚合并查找计划集合),然后添加更多管道? @KasirBarati 我不认识,我放弃了猫鼬及其类型。意识到 NoSQL 不是我的事,所以完全改成了 Postgresql。

以上是关于猫鼬聚合反向查找或没有localField的查找[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用猫鼬羽毛适配器编写聚合?

MongoDB聚合 - 从查找内的数组中仅选择相同的值

通过嵌套数组查找猫鼬组

在查找 localField 中使用 _id 对象的 mongodb 查询

为啥聚合+排序比mongo中的查找+排序更快?

查找 SQL 聚合函数调用中的百分比可能没有嵌套聚合或窗口函数