Можно ли вернуть несколько вложенных документов с mongoDB и Node.js?
В настоящее время у меня есть схема, которая в настоящее время выглядит следующим образом:
var User = new Schema({
id: String,
firstName: String,
lastName: String,
password: String,
username: String,
position: [{
title: String,
location: String,
start: String,
term:Number,
description:String,
date: {type: Date, default: Date.now}
}]
});
У меня есть два пользователя, каждый с двумя встроенными документами позиции.
user1:
"position" : [
{
"title" : "Web Developer",
"location" : "Dublin",
"start" : "May 2017",
"term" : 6,
"description" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dsit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in mi",
"_id" : ObjectId("58d6b7e11e793c9a506ffe0f")
},
{
"description" : "description",
"term" : 12,
"start" : "may 2018",
"location" : "Dublin",
"title" : "Web Developer",
"_id" : ObjectId("58d6af99e4318f4703ceb2af")
}
],
user2:
"position" : [
{
"title" : "Software Engineer",
"location" : "Cork",
"start" : "May 2017",
"term" : 9,
"description" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in miorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in mi",
"_id" : ObjectId("58d6af99e4318f4703cebsju7")
},
{
"title" : "Web Developer",
"location" : "Waterford",
"start" : "May 2017",
"term" : 6,
"description" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dsit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in mi",
"_id" : ObjectId("58d6af99e4318f4703ceb6aj")
}
],
Мой запрос выглядит так:
app.post('/search', function (req, res) {
var position = new RegExp(req.body.position, 'i');
User.find({'position.title': position}, 'position.$').exec(function (err, result) {
console.log(result);
res.send({ results: result });
}); //
});
При поиске "Веб-разработчик" будет возвращена первая запись "Веб-разработчик" у первого пользователя и запись "Веб-разработчик" у второго пользователя, но я не могу вернуть любые последующие записи, и мне просто интересно, так ли это проблема MongoDB, что я могу вернуть только один поддокумент, который соответствует для пользователя? Или что-то не так в моем коде?
Возвращенный объект можно увидеть ниже, объект результатов возвращает двух пользователей, каждый из которых имеет один объект позиции, однако их должно быть 3.
Предположим, у меня есть массив в массиве положений, как бы я получить доступ к этому?
мой текущий код:
app.get('/applied', function(req, res){
User.aggregate(
{$unwind : "$position"},
{$unwind : "$position.applied"},
{$match:{'position.applied.candidate_id': "58dc2bd4e7208a3ea143959e"}}).exec(function (err, result) {
console.log(result);
});
res.render('applied', { title: 'applied'});
});
Моя схема:
position: [{
title: String,
location: String,
start: String,
term:Number,
description:String,
date: {type: Date, default: Date.now},
applied:[{
candidate_id: String,
name: String
}],
}],
1 ответ
Вы можете использовать $unwind, чтобы получить несколько записей из коллекции в отличие от совпадения элемента или '.' оператор, который возвращает только данные первого совпадения
User.aggregate(
{$unwind : "$position"},
{$match:{'position.title': position}}).exec(function (err, result) {
console.log(result);
res.send({ results: result });
});