MongoDB поиск, а затем проект - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть две коллекции - jobs и companies - которые имеют отношение многие-к-одному, так что многие jobs существует для одной companies записи.

jobs имеет следующие поля:

job_id, company_id, last_updated, j_foo, j_bar

companies имеет следующие поля:

company_id, name, 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?

...