Skip to content

nicelocal/mongo-php-async-driver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Async MongoDB PHP extension

This PHP extension offers an async driver for MongoDB, based on the official Rust mongodb library.

It integrates the PHP revolt event loop and rust's tokio event loop, offering a fully asynchronous fiber-based API for mongodb.

Currently a work-in-progress, more methods will be added soon!

Written by Daniil Gentili (@danog), powered by danog/php-tokio, nicelocal/ext-php-rs and the official MongoDB Rust client.

Example

<?php

require 'vendor/autoload.php';

use Nicelocal\Mongo\Client;
use Revolt\EventLoop;

use function Amp\async;
use function Amp\Future\await as await;

Client::register();

function dump(string $database, string $collection, array $find) {
    $collection = \MongoClient::withUriStr("mongodb://localhost:27017")
        ->database($database)
        ->collection($collection);
    $cnt = 0;
    foreach ($collection->find($find) as $k => $v) {
        var_dump($k, $v);
        if ($cnt++ === 3) break;
    }
    var_dump("done");
}

$future1 = async(dump(...), 'nicelocal', 'coll1', ['field' => ['$ne' => 'test']]);
$future2 = async(dump(...), 'nicelocal', 'coll2', ['field' => ['$ne' => 'test']]);

[$res1, $res2] = await([$future1, $future2]);

Usage:

cargo build && php -d extension=target/debug/libmongo_php_async_driver.so test.php

Releases

No releases published

Packages

No packages published