Left Соедините две или более схемы с помощью мангуста. - PullRequest
0 голосов
/ 15 февраля 2020

Вот два примера схемы, определенной следующим образом:

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"
      }
    ]
  }
]
...