У меня есть две коллекции - 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?