首页 > 解决方案 > MongoDB查找然后项目

问题描述

我有两个集合 -jobs并且companies- 它们具有多对一的关系,因此许多jobs存在于一个companies记录中。


jobs具有以下字段:

job_id, company_id, last_updated, j_foo, j_bar


companies具有以下字段:

company_id、名称、some_url、c_foo、c_bar



我现在的查询:

var matchObj = {'company_id':'some_company'};
var lookupObj = {from:'companies',localField:'company_id',foreignField:'company_id',as:'company_info'};
var projectObj = {'job_id':1,'company_id':1,'last_updated':1};
var sortObj = {'last_updated':-1};

jobs.aggregate({$match:queryObj},{$lookup:queryLookup},{$project:queryProject},{$sort:sortObj}).toArray(function(err,results){
  doSomething();
});

返回比我需要的更多的数据:

[
  {
    job_id: val,
    company_id: val,
    last_updated: date,
    j_foo: val,
    j_bar: val,
    company_info: [{ 
      company_id: val, name: val, some_url: val, c_foo: val, c_bar: val
    }]  // I don't want company_info as an array ideally,
        // rather just have the object since it's a to-one relationship
        // it's always just one result. This isn't critical,
        // just would be a nicety if you can help with this too
  },
  {
    job_id: val,
    company_id: val,
    last_updated: date,
    j_foo: val,
    j_bar: val,
    company_info: [{ 
      company_id: val, name: val, some_url: val, c_foo: val, c_bar: val
    }]
  }
]

我想要的输出是:

[
  {
    job_id: val,
    company_id: val,
    last_updated: date,
    company_info: { 
      name: val, some_url: val
    }
  },
  {
    job_id: val,
    company_id: val,
    last_updated: date,
    company_info: { 
      name: val, some_url: val
    }
  }
]

如果输出是:我也可以:

[
  {
    job_id: val,
    company_id: val,
    last_updated: date,
    company_name: val,
    company_some_url: val
  },
  {
    job_id: val,
    company_id: val,
    last_updated: date,
    company_name: val,
    company_some_url: val
  }
]

如何投影查找查询?或者还有其他使用 $addFields 的方法吗?

标签: mongodbmongodb-queryaggregation-frameworkaggregate-functions

解决方案


推荐阅读