Vaše struktura vypadá správně. Do datového pole ukládáte pouze news_id a to je chytřejší implementace, protože uložení kompletního dokumentu způsobí mnoho přesunů a psaní v MongoDB pokaždé, když uživatel přidá novou zprávu do oblíbených.
Důvod, který už asi víte, je ten, že při každé aktualizaci se vytváří nový dokument. Odkaz:http://docs.mongodb.org/ manual/reference/method/db.collection.save/#upsert .
Také si myslím, že jako obchodní pravidlo byste měli omezit počet novinek, které může uživatel nastavit jako oblíbené. Nechat tento seznam neomezeně růst nebude pro vložený návrh dobrý nápad.
V případě, že chcete neomezený počet oblíbených položek, raději pro to vytvořte samostatnou sbírku a poté pro získání všech oblíbených položek uživatelem použijte operátory $match (na ID uživatele) a $sort (of news items) v agregačním dotazu. získat seřazený seznam oblíbených zpráv pro uživatele.