Webdev
Webdev

Reputation: 647

Insert multiple documents in mongodb collection with a single insert statement using php

In PHP I have some data to insert. The sample data is shown below

Array
(
    [0] => Array
        (
            [uuid] => membership-60f929a1989d6960400020
            [channel] => channel-594b9e3568ac3969784876
            [user] => user-5b1e6e1b636e5325325732
            [emailnotifications] => off
            [email] => [email protected]
        )

    [1] => Array
        (
            [uuid] => membership-60f929a198a1a549293025
            [channel] => channel-594b9edcdea14894901526
            [user] => user-5b1e6e1b636e5325325732
            [emailnotifications] => off
            [email] => [email protected]
        )

    [2] => Array
        (
            [uuid] => membership-60f929a198a2b975658255
            [channel] => channel-5ab261a60fe87688298186
            [user] => user-5b1e6e1b636e5325325732
            [emailnotifications] => off
            [email] => [email protected]
        )

    [3] => Array
        (
            [uuid] => membership-60f929a198a3b292013762
            [channel] => channel-5e668d5522526659309093
            [user] => user-5b1e6e1b636e5325325732
            [emailnotifications] => off
            [email] => [email protected]
        )

    [4] => Array
        (
            [uuid] => membership-60f929a198a4a688473796
            [channel] => channel-5e668d6fafbbe937126299
            [user] => user-5b1e6e1b636e5325325732
            [emailnotifications] => off
            [email] => [email protected]
        )    
   

)

I would like to insert each element of the array as single document. For example :-

Array (
                [uuid] => membership-60f929a1989d6960400020
                [channel] => channel-594b9e3568ac3969784876
                [user] => user-5b1e6e1b636e5325325732
                [emailnotifications] => off
                [email] => [email protected]
       )

should be inserted as a separate document . This should be achieved using a single insert statement . Also the version of mongodb being used is 2.4 so I cannot use insertMany. Can this be done ? Any leads would be helpful. Thanks for your response in advance.

Upvotes: 0

Views: 708

Answers (1)

Alex Blex
Alex Blex

Reputation: 37018

update

It's not possible for v2.4.

The batch insert was added to the PHP mongo driver in v1.5.0 combined with the switch to mongodb v2.6 write protocol:

It supports all new features for MongoDB 2.6, including:

  • Aggregate can now return a cursor
  • Aggregation pipelines can now be explained
  • Possible to set maxTimeMS for commands and queries
  • Transparent support for the new command-based MongoDB write API
  • New MongoWriteBatch classes (using the new MongoDB write API)

Previous answer:

The question is about legacy driver https://pecl.php.net/package/mongo/1.5.1

You need to use MongoInsertBatch to insert multiple documents.

From https://www.php.net/manual/en/class.mongoinsertbatch.php (doesn't exist any more):

$docs = array();
$docs[] = array("my" => "demo");
$docs[] = array("is" => "working");
$docs[] = array("pretty" => "well");

$batch = new MongoInsertBatch($collection);
foreach($docs as $document) {
    $batch->add($document);
}
$retval = $batch->execute(array("w" => 1));

In your case $collection is $this->db->memberships

As a side note, you really need to upgrade the stack. It's a decade old.

Upvotes: 1

Related Questions