En général, vous devez utiliser une langue collection par « type » de chose que vous stockez. Il semble que tous les exemples que vous avez donnés ci-dessus relèvent d'un «type» de produit et devraient être dans la même collection. Les documents de la même collection ne doivent pas tous avoir les mêmes champs, mais pour les produits, vous aurez probablement plusieurs champs communs à tous les documents: nom, prix, fabricant, etc. chaque document "sous-type" peut avoir plusieurs champs en commun, comme les disques durs peuvent tous avoir RPM, capacité de stockage, facteur de forme, interface (SATA2/3, IDE, etc).
La justification de ce conseil est que les requêtes MongoDB sont effectuées sur une seule collection à la fois. Si vous souhaitez afficher les résultats de recherche qui couvrent les différentes catégories de produits que vous avez, alors c'est simple avec une collection, mais plus difficile avec plusieurs (et moins performant).
En ce qui concerne les performances de requête, veillez à créer des index sur les champs que vous recherchez. Si vous autorisez la recherche par nom de produit ou par fabricant, vous auriez un index sur le nom et un autre index sur le fabricant. Vos index exacts varieront selon les champs que vous avez dans vos documents. D'autre part, la vitesse d'insertion sera plus rapide avec moins d'index (puisque chaque index doit potentiellement être mis à jour chaque fois que vous enregistrez ou mettez à jour un document), il est donc important de ne pas créer plus d'index que vous. J'aurai vraiment besoin.
Pour plus d'informations sur ces sujets, consultez les documents MongoDB sur schema design et indexes, ainsi que les presentations on 10gen.com sur les haut-parleurs 10gen et les utilisateurs MongoDB.