MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Doktrin ODM dan desain tanpa skema

Solusinya adalah dengan menggunakan @Hash

Berikut adalah contoh SANGAT dasar yang saya buat:

<?php

/**
 * @Document
 */
class Product
{

    /**
     * @Id
     */
    private $id;

    /**
     * @String
     */
    private $name;

    /**
     * @Hash
     */
    private $attributes = array();

    public function getId()
    {
        return $this->id;
    }

    public function setName($name)
    {
        $this->name = $name;
    }

    public function getName()
    {
        return $this->name;
    }

    public function addAttribute($name, $value)
    {
        $key = preg_replace('/[^a-z0-9\ \_]/i', '', $name);
        $key = preg_replace('/\s+/i', '_', $key);
        $key = strtolower($key);
        $this->attributes[$key] = array('value' =>$value, 'label' => $name);
    }

    public function getAttribute($name)
    {
        return $this->attributes[$name];
    }

    public function getAttributes()
    {
        return $this->attributes;
    }

}

Tambahkan beberapa data:

<?php

$pen = new Product();
$pen->setName('Cool Pen');
$pen->addAttribute('Weight', 12);
$pen->addAttribute('Ink Colour', 'Red');
$pen->addAttribute('Colour', 'Black');

$tv = new Product();
$tv->setName('LED LCD TV');
$tv->addAttribute('Weight', 12550);
$tv->addAttribute('Screen Size', 32);
$tv->addAttribute('Colour', 'Black');

$dm->persist($pen);
$dm->persist($tv);

$dm->flush();

Kemudian kueri, temukan produk dengan warna "Hitam" dan Ukuran Layar lebih besar dari 20:

<?php

$query = $dm->createQueryBuilder('Catalogue\Product');
$products = $query->field('attributes.colour.value')->equals('Black')
                ->field('attributes.screen_size.value')->gte(20)
                ->getQuery()->execute();

Saya masih tidak yakin apakah ini cara terbaik untuk melakukan ini dan penelitian saya masih berlangsung.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Simpan array dalam skema Mongoose

  2. Bagaimana cara menggunakan $set dan notasi titik untuk memperbarui elemen array yang disematkan menggunakan elemen lama yang sesuai?

  3. Koneksi diatur ulang oleh rekan pymongo

  4. luwak untuk menentukan pembaruan-upsert melakukan penyisipan atau pembaruan

  5. Bagaimana menjalankan MongoDB dan Mongo-express dengan docker-compose?