1) Wat betreft de documentlimiet van 4 MB, dit is wat de "MongoDB:The Definitive Guide" zegt:
Uiteindelijk hangt het af van hoe hoog je verwacht dat de rekeningen voor een gebruiker zullen groeien. Ik hoop dat het bovenstaande fragment u een idee geeft van de beperkingen die worden opgelegd door de documentgrootte.
2) Gedenormaliseerd schema (rekeningen horen bij het gebruikersdocument) is de beste keuze als u weet dat u nooit globale zoekopdrachten op rekeningen zult uitvoeren (een voorbeeld van een dergelijke vraag is of u de tien meest recente rekeningen wilt ophalen ingevoerd in het systeem). U zult map-reduce moeten gebruiken om resultaten voor dergelijke query's op te halen als u een gedenormaliseerd schema gebruikt.
Genormaliseerd schema (gebruiker en facturen in afzonderlijke documenten) is een betere keuze als u flexibiliteit wilt in de manier waarop de facturen worden opgevraagd. Aangezien MongoDB echter geen joins ondersteunt, moet u meerdere zoekopdrachten uitvoeren telkens wanneer u de rekeningen van een gebruiker wilt ophalen.
Gezien de use-case die je noemde, zou ik gaan voor een gedenormaliseerd schema.
3) Alle updates in MongoDB zijn atomair en geserialiseerd. Dat zou de bezorgdheid van Steve moeten beantwoorden.
Misschien vindt u deze dia's nuttig. http://www.slideshare.net/kbanker/mongodb-meetup
U kunt ook kijken op de pagina Productie-implementaties van MongoDB. Misschien vindt u de dia's van SF.net nuttig.