Вот два примера схемы, определенной следующим образом:
let UserSchema = new Schema({
name: {type: String, required: true}`
});
let BookSchema = new Schema({
user_id: {type: Schema.Types.ObjectId, ref: 'Users'},`
book: {type: String, required: true}
});
let Users = mongoose.model('Users', UserSchema);
let Books = mongoose.model('Books', BookSchema);
Предположим, они имеют следующие данные:
id | name
1 John
2 Daniel
3 David
id | user_id | book
1 1 PHP
2 1 ASP
3 3 Javascript
Я хочу получить тот же результат со следующим SQL оставленным запросом JOIN.
SELECT u.id as u_id, u.name, b.id as b_id, b.book
FROM users as u
LEFT JOIN books as b ON u.id = b.user_id
ORDER BY u.name;
Вывод будет следующим:
u_id | name | b_id | book
2 Daniel NULL NULL
3 David 3 Javascript
1 John 1 PHP
1 John 2 ASP
Есть ли способ сделать это, используя mon goose? Он должен вернуться, как указано выше. То есть в нем должны быть перечислены пользователи, не имеющие книг типа «Даниэль». Моя конечная цель - вернуть данные в виде следующих типов:
[
{
"u_id": 2,
"name": "Daniel",
"books": []
},
{
"u_id": 3,
"name": "David",
"books": {
"b_id": 3,
"book": "Javascript"
}
},
{
"u_id": 1,
"name": "John",
"books": [
{
"b_id": 1,
"book": "PHP"
},
{
"b_id": 2,
"book": "ASP"
}
]
}
]