假设我有User
个收藏,一个用户可以有很多Books
。
我想查询User
,然后查找以获取Books
数据,其中包含特定的userId
和bookId
,但是如果该用户没有{{1} },仍返回带有空书或null的用户数据。
蒙哥:3.4
我尝试过的。
Books
问题:,使用上述代码,如果书籍不匹配,它将返回空结果。我仍然想获取用户数据。
我期望的采样结果是:
找到书后
$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
}
}
答案 0 :(得分:1)
您需要使用$filter
聚合来过滤books
数组。
$this->mongo->selectCollection('users')->aggregate([
[ '$match' => ['userId' => $userId]],
[ '$lookup' => [
'from' => 'books',
'localField' => 'userId',
'foreignField' => 'userId',
'as' => 'books'
]],
[ '$addFields' => [
'books' => [
'$filter' => [
'input' => '$books',
'as' => 'book',
'cond' => [ '$eq' => ['$$book.userId', bookId]]
]
]
]]
])