Php mongodb findone ke array

Contoh

Contoh untuk mencari hanya satu pengguna dengan id tertentu, Anda harus melakukannya

$options = ['limit' => 1];
$filter = ['_id' => new \MongoDB\BSON\ObjectID('578ff7c3648c940e008b457a')];
$query = new \MongoDB\Driver\Query($filter, $options);

$cursor = $manager->executeQuery('database_name.collection_name', $query);
$cursorArray = $cursor->toArray();
if(isset($cursorArray[0])) {
    var_dump($cursorArray[0]);
}

Saya telah menemukan beberapa posting lama di stackoverflow mengenai masalah kebocoran memori dengan driver mongodb php. Tetapi tidak ada yang memiliki solusi atau penjelasan akhir untuk driver php mongodb versi lama atau untuk versi yang saya gunakan

Juga log perubahan driver tidak menunjukkan pembaruan terkini terkait kebocoran memori

Versi Driver saya adalah 1. 4. 5 (stabil) dengan PHP 5. 3. 10

Kode dengan gema Debug

     echo memory_get_usage()." in MB : "; 
        echo memory_get_usage()/1024/1024;
        echo "
"; unset($cursor); $dt = new DateTime($day." 00:00:00", new DateTimeZone($this->timezone)); $mongodate = new MongoDate($dt->getTimestamp()); // print_r($mongodate); $cursor = $dc->findOne(array('keyword' => $keyword, 'date' => $mongodate)); echo "Cursor loaded Doc (".$cursor['_id'].") : "; echo memory_get_usage()." in MB : "; echo memory_get_usage()/1024/1024; echo "
";
_

** Penggunaan Memori Sejati Echos**

3932160 in MB : 3.75
Cursor geladen Doc (534cdee3c30fd1b8ee0bb641) : 218305980 in MB : 208.1928062439

Kode dengan Debug menggemakan Penggunaan Memori Sejati

        echo memory_get_usage(true)." in MB : "; 
        echo memory_get_peak_usage(true)/1024/1024;
        echo "
"; unset($cursor); $dt = new DateTime($day." 00:00:00", new DateTimeZone($this->timezone)); $mongodate = new MongoDate($dt->getTimestamp()); // print_r($mongodate); $cursor = $dc->findOne(array('keyword' => $keyword, 'date' => $mongodate)); /* echo "
";
        print_r($cursor);
        echo "
"; */ . $kursor['_id']. "). "; gema memory_get_usage(benar). " di MB. "; gema memory_get_peak_usage(true)/1024/1024;
";

** Penggunaan Memori Sejati Echos**

3932160 in MB : 3.75
Cursor loaded Doc (534cdee3c30fd1b8ee0bb641) : 218628096 in MB : 224.5
_

Jadi hanya satu Dokumen yang menyebabkan peningkatan lebih dari 200 MB memori

bitrs3:PRIMARY> var doc = db.dailies.findOne({"_id" : ObjectId("534cdee3c30fd1b8ee0bb641")})
bitrs3:PRIMARY> Object.bsonsize(doc)
16754823

File yang dimuat memang tidak sedikit, yaitu 16754823 Bytes sehingga mencapai Bson Size maksimal 16 MB

Masih saya bertanya-tanya apakah normal bahwa operasi findOne + kursor yang membuat array dari hasil membutuhkan begitu banyak memori

There is also a notation to retrieve all fields, but the specified ones

$users = $mongo->my_db->users;
$user = $users->findOne(array('username' => 'jwage'), array('password' => 0));
print_r($user);

?>

Will return all fields of the user, but the password field.

Opsional. Collation memungkinkan pengguna untuk menentukan aturan khusus bahasa untuk perbandingan string, seperti aturan huruf dan tanda aksen. Saat menentukan susunan, bidang

<?php

$collection = (new MongoDB\Client)->test->restaurants;

$deletedRestaurant = $collection->findOneAndDelete(
    [ 'restaurant_id' => '40375376' ],
    [
        'projection' => [
            'name' => 1,
            'borough' => 1,
            'restaurant_id' => 1,
        ],
    ]
);

var_dump($deletedRestaurant);
_0 adalah wajib; . Untuk deskripsi bidang, lihat

Jika collation tidak ditentukan tetapi koleksi memiliki collation default, operasi menggunakan collation yang ditentukan untuk koleksi. Jika tidak ada susunan yang ditentukan untuk koleksi atau untuk operasi, MongoDB menggunakan perbandingan biner sederhana yang digunakan di versi sebelumnya untuk perbandingan string

<?php

$collection = (new MongoDB\Client)->test->restaurants;

$deletedRestaurant = $collection->findOneAndDelete(
    [ 'restaurant_id' => '40375376' ],
    [
        'projection' => [
            'name' => 1,
            'borough' => 1,
            'restaurant_id' => 1,
        ],
    ]
);

var_dump($deletedRestaurant);
1campuran

Opsional. Memungkinkan pengguna untuk menentukan komentar sewenang-wenang untuk membantu melacak operasi melalui profiler database, output CurrentOp, dan log

Ini tidak didukung untuk versi server sebelum 4. 4 dan akan menghasilkan pengecualian pada waktu eksekusi jika digunakan

Baru di versi 1. 13

<?php

$collection = (new MongoDB\Client)->test->restaurants;

$deletedRestaurant = $collection->findOneAndDelete(
    [ 'restaurant_id' => '40375376' ],
    [
        'projection' => [
            'name' => 1,
            'borough' => 1,
            'restaurant_id' => 1,
        ],
    ]
);

var_dump($deletedRestaurant);
_2string. Himpunan. obyek

Opsional. Indeks yang akan digunakan. Tentukan nama indeks sebagai string atau pola kunci indeks sebagai dokumen. Jika ditentukan, maka sistem kueri hanya akan mempertimbangkan rencana menggunakan indeks yang diisyaratkan

Opsi ini tersedia di MongoDB 4. 4+ dan akan menghasilkan pengecualian pada waktu eksekusi jika ditentukan untuk versi server yang lebih lama

Baru di versi 1. 7

<?php

$collection = (new MongoDB\Client)->test->restaurants;

$deletedRestaurant = $collection->findOneAndDelete(
    [ 'restaurant_id' => '40375376' ],
    [
        'projection' => [
            'name' => 1,
            'borough' => 1,
            'restaurant_id' => 1,
        ],
    ]
);

var_dump($deletedRestaurant);
_3array. obyek

Opsional. Peta nama dan nilai parameter. Nilai harus berupa ekspresi konstan atau tertutup yang tidak mereferensikan bidang dokumen. Parameter kemudian dapat diakses sebagai variabel dalam konteks ekspresi agregat (mis. g.

<?php

$collection = (new MongoDB\Client)->test->restaurants;

$deletedRestaurant = $collection->findOneAndDelete(
    [ 'restaurant_id' => '40375376' ],
    [
        'projection' => [
            'name' => 1,
            'borough' => 1,
            'restaurant_id' => 1,
        ],
    ]
);

var_dump($deletedRestaurant);
_4)

Ini tidak didukung untuk versi server sebelum 5. 0 dan akan menghasilkan pengecualian pada waktu eksekusi jika digunakan

Baru di versi 1. 13

<?php

$collection = (new MongoDB\Client)->test->restaurants;

$deletedRestaurant = $collection->findOneAndDelete(
    [ 'restaurant_id' => '40375376' ],
    [
        'projection' => [
            'name' => 1,
            'borough' => 1,
            'restaurant_id' => 1,
        ],
    ]
);

var_dump($deletedRestaurant);
_5bilangan bulat Opsional. Batas waktu kumulatif dalam milidetik untuk memproses operasi pada kursor. MongoDB membatalkan operasi paling awal berikut ini.
<?php

$collection = (new MongoDB\Client)->test->restaurants;

$deletedRestaurant = $collection->findOneAndDelete(
    [ 'restaurant_id' => '40375376' ],
    [
        'projection' => [
            'name' => 1,
            'borough' => 1,
            'restaurant_id' => 1,
        ],
    ]
);

var_dump($deletedRestaurant);
6MongoDB\Driver\Session

Opsional. Sesi klien untuk dikaitkan dengan operasi

Baru di versi 1. 3

<?php

$collection = (new MongoDB\Client)->test->restaurants;

$deletedRestaurant = $collection->findOneAndDelete(
    [ 'restaurant_id' => '40375376' ],
    [
        'projection' => [
            'name' => 1,
            'borough' => 1,
            'restaurant_id' => 1,
        ],
    ]
);

var_dump($deletedRestaurant);
_7array

Opsional. untuk diterapkan ke kursor, yang menentukan bagaimana dokumen BSON dikonversi ke nilai PHP. Default ke peta tipe koleksi

Ini akan digunakan untuk dokumen hasil yang dikembalikan

<?php

$collection = (new MongoDB\Client)->test->restaurants;

$deletedRestaurant = $collection->findOneAndDelete(
    [ 'restaurant_id' => '40375376' ],
    [
        'projection' => [
            'name' => 1,
            'borough' => 1,
            'restaurant_id' => 1,
        ],
    ]
);

var_dump($deletedRestaurant);
8MongoDB\Driver\WriteConcern

Opsional. Tulis perhatian yang akan digunakan untuk operasi. Default untuk masalah penulisan koleksi

Tidak mungkin menentukan perhatian tulis untuk masing-masing operasi sebagai bagian dari transaksi. Sebagai gantinya, setel opsi

<?php

$collection = (new MongoDB\Client)->test->restaurants;

$deletedRestaurant = $collection->findOneAndDelete(
    [ 'restaurant_id' => '40375376' ],
    [
        'projection' => [
            'name' => 1,
            'borough' => 1,
            'restaurant_id' => 1,
        ],
    ]
);

var_dump($deletedRestaurant);
_8 saat memulai transaksi dengan startTransaction

Nilai Pengembalian

Larik atau objek untuk dokumen yang dihapus, atau

object(MongoDB\Model\BSONDocument)#17 (1) {
  ["storage":"ArrayObject":private]=>
  array(4) {
    ["_id"]=>
    object(MongoDB\BSON\ObjectId)#11 (1) {
      ["oid"]=>
      string(24) "594d5ef280a846852a4b3f70"
    }
    ["borough"]=>
    string(9) "Manhattan"
    ["name"]=>
    string(15) "Agra Restaurant"
    ["restaurant_id"]=>
    string(8) "40375376"
  }
}
0 jika tidak ada dokumen yang cocok dengan kueri. Jenis pengembalian akan bergantung pada opsi
<?php

$collection = (new MongoDB\Client)->test->restaurants;

$deletedRestaurant = $collection->findOneAndDelete(
    [ 'restaurant_id' => '40375376' ],
    [
        'projection' => [
            'name' => 1,
            'borough' => 1,
            'restaurant_id' => 1,
        ],
    ]
);

var_dump($deletedRestaurant);
7

Kesalahan/Pengecualian

jika respons perintah dari server salah bentuk

jika opsi digunakan dan tidak didukung oleh server yang dipilih (mis. g. collation,

object(MongoDB\Model\BSONDocument)#17 (1) {
  ["storage":"ArrayObject":private]=>
  array(4) {
    ["_id"]=>
    object(MongoDB\BSON\ObjectId)#11 (1) {
      ["oid"]=>
      string(24) "594d5ef280a846852a4b3f70"
    }
    ["borough"]=>
    string(9) "Manhattan"
    ["name"]=>
    string(15) "Agra Restaurant"
    ["restaurant_id"]=>
    string(8) "40375376"
  }
}
5,
<?php

$collection = (new MongoDB\Client)->test->restaurants;

$deletedRestaurant = $collection->findOneAndDelete(
    [ 'restaurant_id' => '40375376' ],
    [
        'projection' => [
            'name' => 1,
            'borough' => 1,
            'restaurant_id' => 1,
        ],
    ]
);

var_dump($deletedRestaurant);
8)

untuk kesalahan terkait penguraian parameter atau opsi

MongoDB\Driver\Exception\RuntimeException untuk kesalahan lain di tingkat driver (mis. g. kesalahan koneksi)

Perilaku

Saat mengevaluasi kriteria kueri, MongoDB membandingkan tipe dan nilai menurut aturan perbandingannya sendiri untuk tipe BSON, yang berbeda dari aturan perbandingan dan juggling tipe PHP. Saat mencocokkan tipe BSON khusus, kriteria kueri harus menggunakan kelas BSON masing-masing di driver (mis. g. gunakan MongoDB\BSON\ObjectId untuk mencocokkan ObjectId)

Contoh

Contoh berikut menemukan dan menghapus dokumen dengan

object(MongoDB\Model\BSONDocument)#17 (1) {
  ["storage":"ArrayObject":private]=>
  array(4) {
    ["_id"]=>
    object(MongoDB\BSON\ObjectId)#11 (1) {
      ["oid"]=>
      string(24) "594d5ef280a846852a4b3f70"
    }
    ["borough"]=>
    string(9) "Manhattan"
    ["name"]=>
    string(15) "Agra Restaurant"
    ["restaurant_id"]=>
    string(8) "40375376"
  }
}
8 dari ________16______9 dari koleksi MongoDB\Collection::findOneAndDelete0 di database MongoDB\Collection::findOneAndDelete1

salinan

<?php

$collection = (new MongoDB\Client)->test->restaurants;

$deletedRestaurant = $collection->findOneAndDelete(
    [ 'restaurant_id' => '40375376' ],
    [
        'projection' => [
            'name' => 1,
            'borough' => 1,
            'restaurant_id' => 1,
        ],
    ]
);

var_dump($deletedRestaurant);
_

Outputnya kemudian akan menyerupai

salinan

object(MongoDB\Model\BSONDocument)#17 (1) {
  ["storage":"ArrayObject":private]=>
  array(4) {
    ["_id"]=>
    object(MongoDB\BSON\ObjectId)#11 (1) {
      ["oid"]=>
      string(24) "594d5ef280a846852a4b3f70"
    }
    ["borough"]=>
    string(9) "Manhattan"
    ["name"]=>
    string(15) "Agra Restaurant"
    ["restaurant_id"]=>
    string(8) "40375376"
  }
}

Lihat juga

  • findAndModify referensi perintah dalam manual MongoDB

←   MongoDB\Collection. findOne() MongoDB\Collection. findOneAndReplace()  →

© MongoDB, Inc 2008-sekarang. MongoDB, Mongo, dan logo daun adalah merek dagang terdaftar dari MongoDB, Inc