Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unrecognized field 'allowDiskUse' #2331

Closed
jinrenjie opened this issue Dec 27, 2021 · 5 comments
Closed

Unrecognized field 'allowDiskUse' #2331

jinrenjie opened this issue Dec 27, 2021 · 5 comments

Comments

@jinrenjie
Copy link

jinrenjie commented Dec 27, 2021

  • Laravel Version: 8.77.1
  • Laravel-mongodb Version: 3.8.4
  • PHP Version: 8.1.1
  • PHP MongoDB Extension Version: 1.12.0
  • Database Driver & Version: 4.0

Description:

Steps to reproduce

  1. Model::query()->orderBy('created_at', 'desc')->options(['allowDiskUse' => true])->paginate(10);

Expected behaviour

Model paginate function using Aggregate Operation to build query

Actual behaviour

Failed to parse: { find: "room_sales", filter: { $and: [ { is_new: null }, { deleted_at: null } ] }, allowDiskUse: true, limit: 10, $db: "sushi_user", lsid: { id: UUID("025d946f-fcb9-4eca-93bc-0d57f814ec1d") }, $clusterTime: { clusterTime: Timestamp(1640584069, 1), signature: { hash: BinData(0, 49B7F100EC85107FB854AB347FF9F6DF6A5143DB), keyId: 7010209366712254465 } } }. Unrecognized field 'allowDiskUse'.

Logs: [2021-12-27 14:21:09] local.ERROR: Failed to parse: { find: "room_sales", filter: { $and: [ { is_new: null }, { deleted_at: null } ] }, allowDiskUse: true, limit: 10, $db: "sushi_user", lsid: { id: UUID("8801c1ee-c78b-4110-9443-ff5f898875d9") }, $clusterTime: { clusterTime: Timestamp(1640586066, 1), signature: { hash: BinData(0, 7D9767A6094AB6051B36F5F9AEC53C51CD138B42), keyId: 7010209366712254465 } } }. Unrecognized field 'allowDiskUse'. {"exception":"[object] (MongoDB\\Driver\\Exception\\CommandException(code: 9): Failed to parse: { find: \"room_sales\", filter: { $and: [ { is_new: null }, { deleted_at: null } ] }, allowDiskUse: true, limit: 10, $db: \"sushi_user\", lsid: { id: UUID(\"8801c1ee-c78b-4110-9443-ff5f898875d9\") }, $clusterTime: { clusterTime: Timestamp(1640586066, 1), signature: { hash: BinData(0, 7D9767A6094AB6051B36F5F9AEC53C51CD138B42), keyId: 7010209366712254465 } } }. Unrecognized field 'allowDiskUse'. at /project/vendor/mongodb/mongodb/src/Operation/Find.php:341) [stacktrace] #0 /project/vendor/mongodb/mongodb/src/Operation/Find.php(341): MongoDB\\Driver\\Server->executeQuery('sushi_user.room...', Object(MongoDB\\Driver\\Query), Array) #1 /project/vendor/mongodb/mongodb/src/Collection.php(666): MongoDB\\Operation\\Find->execute(Object(MongoDB\\Driver\\Server)) #2 [internal function]: MongoDB\\Collection->find(Array, Array) #3 /project/vendor/jenssegers/mongodb/src/Collection.php(42): call_user_func_array(Array, Array) #4 /project/vendor/jenssegers/mongodb/src/Query/Builder.php(399): Jenssegers\\Mongodb\\Collection->__call('find', Array) #5 /project/vendor/jenssegers/mongodb/src/Query/Builder.php(191): Jenssegers\\Mongodb\\Query\\Builder->getFresh(Array) #6 /project/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(625): Jenssegers\\Mongodb\\Query\\Builder->get(Array) #7 /project/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(609): Illuminate\\Database\\Eloquent\\Builder->getModels(Array) #8 /project/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(809): Illuminate\\Database\\Eloquent\\Builder->get(Array) #9 /project/app/Http/Controllers/Web/RoomController.php(242): Illuminate\\Database\\Eloquent\\Builder->paginate(10) #10 /project/app/Http/Controllers/Web/RoomController.php(526): NeoX\\Http\\Controllers\\Web\\RoomController->list(Object(Illuminate\\Http\\Request)) #11 /project/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): NeoX\\Http\\Controllers\\Web\\RoomController->listOrDetail(Object(Illuminate\\Http\\Request), 'all') #12 /project/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('listOrDetail', Array) #13 /project/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(NeoX\\Http\\Controllers\\Web\\RoomController), 'listOrDetail') #14 /project/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController() #15 /project/vendor/laravel/framework/src/Illuminate/Routing/Router.php(695): Illuminate\\Routing\\Route->run() #16 /project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #17 /project/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #18 /project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #19 /project/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #20 /project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #21 /project/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #22 /project/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest(Object(Illuminate\\Http\\Request), Object(Illuminate\\Session\\EncryptedStore), Object(Closure)) #23 /project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #24 /project/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #25 /project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #26 /project/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #27 /project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #28 /project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #29 /project/vendor/laravel/framework/src/Illuminate/Routing/Router.php(697): Illuminate\\Pipeline\\Pipeline->then(Object(Closure)) #30 /project/vendor/laravel/framework/src/Illuminate/Routing/Router.php(672): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request)) #31 /project/vendor/laravel/framework/src/Illuminate/Routing/Router.php(636): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route)) #32 /project/vendor/laravel/framework/src/Illuminate/Routing/Router.php(625): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request)) #33 /project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request)) #34 /project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request)) #35 /project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #36 /project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #37 /project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #38 /project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #39 /project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #40 /project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #41 /project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #42 /project/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #43 /project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #44 /project/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #45 /project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\\Proxy\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #46 /project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #47 /project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then(Object(Closure)) #48 /project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request)) #49 /project/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request)) #50 {main} "}
@NicoHsu
Copy link

NicoHsu commented Mar 29, 2022

same problem
any solution?

@jinrenjie
Copy link
Author

same problem any solution?

I don't know, But the same code executes fine on a MongoDB 4.4.2 server.

If you have a good solution, please share it too!🍻

@NicoHsu
Copy link

NicoHsu commented Mar 30, 2022

same problem any solution?

I don't know, But the same code executes fine on a MongoDB 4.4.2 server.

If you have a good solution, please share it too!🍻

ok I found this

https://stackoverflow.com/questions/53584326/is-allowdiskuse-valid-for-find-method-in-mongodb
https://www.mongodb.com/docs/manual/reference/method/cursor.allowDiskUse/

It seems that mongodb supports allowDiskUse since version 4.4?
allowDiskUse was only available in aggregates before version 4.4

@jinrenjie
Copy link
Author

same problem any solution?

I don't know, But the same code executes fine on a MongoDB 4.4.2 server.
If you have a good solution, please share it too!🍻

ok I found this

https://stackoverflow.com/questions/53584326/is-allowdiskuse-valid-for-find-method-in-mongodb https://www.mongodb.com/docs/manual/reference/method/cursor.allowDiskUse/

It seems that mongodb supports allowDiskUse since version 4.4? allowDiskUse was only available in aggregates before version 4.4

Yes, I've seen that. I think this is most likely due to the php-mongodb extension upgrade, but I compared the query logs generated before and after the upgrade and they are consistent!

@jinrenjie
Copy link
Author

I found the problem, the query logic of paginating was deleted in this commit.

This caused pagination queries to use the default find instead of aggregate. But I don't know why.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants