Допустим, у меня есть коллекция User
, и у пользователя может быть много Books
.
Я хочу запросить User
, а затем выполнить поиск, чтобы получить Books
данные с конкретными userId
иbookId
но если у этого пользователя нет Books
, все равно возвращайте данные пользователя с пустыми книгами или с нулем.
Mongo: 3,4
Что япробовал.
$this->mongo->selectCollection('users')->aggregate([
['$match' => ['userId' => $userId]],
[
'$lookup' => [
'from' => 'books',
'localField' => 'userId',
'foreignField' => 'userId',
'as' => 'books'
]
],
['$unwind' => [
'path' => '$books',
]],
['$match' => ['books.bookId' => $bookId]]
]);
Проблема: с кодом выше, он вернет пустой результат, когда книга не соответствует.Я все еще хочу получить данные пользователя.
Пример ожидаемого результата:
Когда книга найдена
user : {
userId: 1
name: xxx,
books: {
name: Book name
userId: 1
}
}
Когда книга не найдена
user : {
userId: 1,
name: xxx,
books: null or whatever
}