Как избежать загрузки ссылочных документов при создании нового документа?

У меня есть документ Playlist, который ссылается на множество документов Song, которые, в свою очередь, ссылаются на другие документы:

/** @Document(collection="playlists") */
class Playlist
{
    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ReferenceMany(targetDocument="Song", simple=true)
     */
    protected $songs;
}

/** @Document(collection="songs") */
class Song
{
    /**
     * @var string
     *
     * @ReferenceOne(targetDocument="Foo", simple=true)
     */
    protected $foo;

    /**
     * @var string
     *
     * @ReferenceOne(targetDocument="Bar", simple=true)
     */
    protected $bar;
}

Другой документ Like ссылается на один Playlist:

/** @Document(collection="likes") */
class Like
{
    /**
     * @var Playlist
     *
     * @ReferenceOne(targetDocument="Playlist", simple=true)
     */
    protected $playlist;
}

Каждый раз, когда я сохраняю (вставляю) новый Like документ, некоторые ссылки (глубокие или нет) загружаются (выполняется множество связанных запросов); что в данном конкретном случае бесполезно.

Как я могу избежать этого «жадного» поведения (рефакторинг модели, конфигурация, кэширование и т. д.)?


person David    schedule 05.02.2016    source источник


Ответы (1)


использовать ручную ссылку:

https://docs.mongodb.org/manual/reference/database-references/#manual-references

Короче говоря, сохраните идентификатор "List" в Articles, с которым он связан.

Затем, когда вы меняете "List", вам не нужно загружать все связанные статьи.

Вы можете получить все статьи для данного «списка» с помощью:

db.articles.find({"listId" : "foo"})

Я думаю, что цель коллекции "List" изменится - не уверен, не видя вашей схемы. Это причина кавычек вокруг "List".

person Hughzi    schedule 05.02.2016