Mongo查找即使外部不匹配也可以返回本地

时间:2018-09-17 10:58:33

标签: mongodb mongodb-query aggregation-framework

假设我有User个收藏,一个用户可以有很多Books

我想查询User,然后查找以获取Books数据,其中包含特定的userIdbookId,但是如果该用户没有{{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
    }
}

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]]
      ]
    ]
  ]]
])