Open alexstandiford opened 4 years ago
WIP PR for update_many
method. #20
So, after working with BerlinDB for a while, I've come to realize that this is not a great idea, in-general. The query is technically faster than looping through and running many queries, however, in a production site this could really gum up the WordPress install while this query runs.
If anything, I think update_many
could potentially be basically a method that accepts a query, and will delete all records that match that query. The key difference is it would be little more than a helper function that would use a foreach
loop to loop through the found records, and delete each one.
The nice thing about having methods be wrappers like you suggest @alexstandiford, is that it offers up an opportunity to build in some kind of batch processing/jobs/deferment type stuff. 👍
Right, which is exactly how you would actually delete large quantities of data in WordPress, anyway. These seem like a great opportunity to make a static method.
Something like:
/**
* @var array $deleted array of deleted data IDs
**/
$deleted = Query::delete_many( [/** query args **/] );
/**
* @var array $inserted array of inserted data IDs
**/
$inserted = Query::insert_many([/** array of items to insert **/]);
/**
* @var array $inserted array of updated data IDs
**/
$update_many = Query::update_many([/** array of items to update, potentially keyed by the item ID or something like that. **/]);
There are many situations where it's practical to create, or update many records at one time, using the same values. Currently, the only way to-do this with Berlin is by querying the records, looping through each one, and updating the record one at a time.
While working with Mongoose, I found that they have three methods,
updateMany
,addMany
, anddeleteMany
, which would make the database update using a single query instead of x+1 queries as mentioned in the above paragraph.