поиск и возврат объектов в массивах mongoDB - PullRequest
0 голосов
/ 03 января 2019

Я использую laravel-mongoDB, как я могу искать в аттракционах и заголовках блогов и получать только объект, а не целую запись.Я пробовал

[
'$match' => [
             "attraction.title" => 
              ['$regex' => '.*' . $request- >search . '.*']
     ],
],

Результат был целой записью.например, если поиск первый, вывод должен быть:

[{title: "first attraction", complete: false},{title: "first blog", complete: false}]

и это записи

[attraction: [{title: "first attraction", complete: false}, {title:"second attraction", 
complete: true}]
blog: [{title: "first blog", complete: false}, {title: "second blog", complete: false}]
title: "test"
type: "internal"]

1 Ответ

0 голосов
/ 07 января 2019

Я не получил результат только одним запросом, но надеюсь, что это поможет

$data = Model::raw(function ($collection) use ($request) {
        return $collection->aggregate([
                ['$facet' =>
                    [
                        'attr' => [
                            [
                                '$match' => [
                                    "attraction.title" => ['$regex' => '.*' . $request->search . '.*'],
                                ],
                            ],
                            [
                                '$unwind' => '$attraction'
                            ],
                            [
                                '$project' => [
                                    'title' => '$attraction.title',
                                ]
                            ],
                            [
                                '$match' => [
                                    "title" => ['$regex' => '.*' . $request->search . '.*'],
                                ],
                            ]
                        ],
                        'blog' => [
                            [
                                '$match' => [
                                    "blog.title" => ['$regex' => '.*' . $request->search . '.*'],
                                ],
                            ],
                            [
                                '$unwind' => '$blog'
                            ],
                            [
                                '$project' => [
                                    'title' => '$blog.title',
                                ]
                            ],
                            [
                                '$match' => [
                                    "title" => ['$regex' => '.*' . $request->search . '.*'],
                                ],
                            ]
                        ]
                    ]
                ],


            ]

        );
    });

$ данные будут выглядеть так:

  {
     attr:[
           {title:...},
           {title:...}
           ],
      blog:[
           {title:...},
           {title:...}
           ]
  }

и используйте iterator_to_array и foreach для получения окончательного результата

...