У меня есть документ наследования с типом SINGLE_COLLECTION, настроенным в моем приложении Symfony 4.4. Когда я запускаю команду bin/console doctrine:mongodb:schema:create, возникает ошибка a collection ‘db.Person’ already exists.
Все было сделано по документации: https://www.doctrine-project.org/projects/doctrine-mongodb-odm/en/2.0/reference/inheritance-mapping.html#single-collection-inheritance
src / Document / Person.php
<?php namespace AppDocument; use DoctrineODMMongoDBMappingAnnotations as MongoDB; /** * @MongoDBDocument * @MongoDBInheritanceType(«SINGLE_COLLECTION») * @MongoDBDiscriminatorField(«type») * @MongoDBDiscriminatorMap({«person»=Person::class, «employee»=Employee::class}) */ class Person { /** * @var integer|null * * @MongoDBId */ protected $id; /** * @var string|null * * @MongoDBField(type=»string») */ protected $name; }
src / Document / Employee.php
<?php namespace AppDocument; use DoctrineODMMongoDBMappingAnnotations as MongoDB; /** * @MongoDBDocument */ class Employee extends Person { /** * @var string|null * * @MongoDBField(type=»string») */ protected $grade; }
Похоже, что команда пытается создать коллекцию БД для каждого класса Document, игнорируя объявление типа SINGLE_COLLECTION.
Как это исправить?
Коллекции в MongoDB не нужно создавать явно. Что такое неудачная операция? — person Mateusz K. schedule 05.05.2020
Я знаю, что это не нужно, но я предпочитаю создавать полную схему БД для индексов. Расширенный ответ об ошибке: MongoDBDriverExceptionCommandException: a collection ‘db.Person’ already exists in vendor/mongodb/mongodb/src/Operation/CreateCollection.php:222 — person Mateusz K. schedule 05.05.2020
Что такое полная трассировка стека? — person Mateusz K. schedule 05.05.2020
Олег, у меня не получается stacktrace. Когда я запустил bin/console doctrine:mongodb:schema:create -vvv, я получил ответ: a collection ‘db.Person’ already exists Created indexes for all classes — person Mateusz K. schedule 06.05.2020
Источник: