107 votes

Mangouste vs Mongodb (modules / extensions nodejs), lequel de mieux? et pourquoi?

Im juste arriver à nodejs et se que il y a beaucoup de libs pour une utilisation avec mongodb, le plus populaire semble être ces deux (mangouste et mongodb) puis-je obtenir des avantages et des inconvénients de ces extensions? Il existe de meilleures alternatives ou à deux?

Edit: Trouvé une nouvelle bibliothèque qui semble également intéressant nœud-mongole et est "mongol DeadBeef est un jeu génial de Mongo DB node.js pilote qui tente de le rapproche de la mongodb coquille". (lisez-moi.md)

https://github.com/marcello3d/node-mongolian

C'est juste pour ajouter plus de ressources pour les nouvelles personnes que voir ce, donc en gros mongol son comme un ODM...

121voto

cjohn Points 2416

La mangouste est de niveau supérieur et utilise MongoDB pilote (c'est une dépendance, vérifier le colis.json), de sorte que vous serez en utilisant que de toute façon compte tenu de ces options. La question que vous devriez vous poser est, "je veux utiliser le raw pilote, ou dois-je besoin d'un objet-document outil de modélisation?" Si vous êtes à la recherche d'un objet de la modélisation (ODM, une contrepartie de l'Orm du monde SQL) outil de sauter certains niveau inférieur de travail, vous souhaitez Mangouste.

Si vous voulez un pilote, parce que vous avez l'intention de briser un grand nombre de règles que l'ODM peut appliquer, aller avec MongoDB. Si vous souhaitez un pilote rapide, et qui peut vivre avec quelques fonctionnalités manquantes, donner mongol DeadBeef un essai: https://github.com/marcello3d/node-mongolian

33voto

Marshall Points 2498

La mangouste est, de loin, le plus populaire. Je l'utilise, et n'ont pas utilisé les autres. Donc je ne peux pas parler des autres, mais je peux vous raconter mes problèmes avec la Mangouste.

  • Difficile / mauvais documentation
  • Les modèles sont utilisés. Et ils définissent la structure de vos documents. Pourtant, ce qui semble étrange pour Mongo où l'un de ses avantages est que vous pouvez jeter dans une colonne (err, attribut?) ou tout simplement ne pas en ajouter un.
  • Les modèles sont sensibles à la casse, Moi - même et d'autres devs qui je travaille ont des problèmes où le cas de le nom de la collection que le modèle est défini avec peut l'amener à ne pas enregistrer quoi que ce soit, w/o erreur. Nous avons trouvé que l'utilisation de tous les noms minuscules qui fonctionne le mieux. E. g. au lieu de faire quelque chose comme mongooseInstace.model('MyCollection', { "_id": Number, "xyz": String }) il est mieux de le faire (même si le nom de la collection est vraiment MyCollection): mongooseInstace.model('mycollection', { "_id": Number, "xyz": String })

Mais honnêtement, il est vraiment utile. Le plus gros problème est la documentation. Il est là, mais il est sec et difficile de trouver ce dont vous avez besoin. Il pourrait utiliser au mieux les explications et les exemples. Mais une fois que vous avez passé ces choses, il fonctionne vraiment très bien.

14voto

jgmjgm Points 36

J'ai seulement utilisé mongodb. Dans mon opinion personnelle, je recommande de commencer avec quelque chose de faible niveau, puis en les déplaçant vers le haut. Sinon, vous pourriez trouver vous-même à l'aide de l'avancé de fonctionnalités fournies par la hausse du niveau des pilotes comme la mangouste à aucun avantage réel.

Le problème que j'ai eu avec mongodb, qui est endémique à node.js est les pauvres de la documentation. Il y a de la documentation et beaucoup de lui, mais il n'est pas toujours le plus utile. Que j'ai vu jusqu'à présent il n'y a pas de bonne et approfondie des exemples de la production de l'utilisation du pilote. La documentation est rempli avec la même basé sur un modèle exemple d'ouvrir une connexion, numéro de commande et fermer la connexion. Vous pouvez dire c'est le copier-collé à partir d'un modèle, parce que chaque exemple comprend requis pour tout ce qui peut être nécessaire plutôt que seulement ce qui est nécessaire pour chaque exemple.

Pour donner un exemple pris totalement au hasard:

  • raw {Boolean, default:false}, effectuer des opérations à l'aide de matières bfils tampons.

Que signifie exactement "effectuer des opérations à l'aide de matières bfils tampons" faire? Je ne peux pas trouver il a expliqué n'importe où et une recherche sur Google pour cette phrase n'aide pas. Je pourrais peut-être Google plus, mais je ne devrais pas avoir à le faire. L'information devrait être là. Existe-il des performances, de la stabilité, l'intégrité, la compatibilité, la portabilité ou fonctionnellement avantages pour l'activation/la désactivation de cette option? Je n'ai vraiment aucune idée sans plonger profondément dans le code et si vous êtes dans mon bateau c'est un grave problème. J'ai un démon où parfait persistance n'est pas nécessaire, mais le programme doit être très stable au moment de l'exécution. Je ne pouvais supposer cela signifie qu'il attend de moi pour désérialiser et à la sérialisation JSON ou est quelque chose de faible niveau, interne et transparente pour l'utilisateur, mais je peux me tromper. Même si j'ai tendance à faire de bonnes suppositions je ne peux pas compter sur des hypothèses et de conjectures lors de la prise de systèmes vitaux. Donc ici, je peux tester mon affirmation avec le code ou de creuser beaucoup plus profond dans Google ou dans leur code. Comme un hors ce n'est pas si mauvais, mais je trouve mon auto dans cette situation à de nombreuses reprises lors de la lecture de leur documentation. La différence peut signifier jours passé sur une tâche versus heures. J'ai besoin de la confirmation et de la documentation à peine me donne une explication, sans parler de la confirmation.

La documentation est précipité. Il n'a pas d'expliquer les événements, donne vague de détails sur lorsque des erreurs sont jetés ou la nature de ces erreurs et il y a souvent plusieurs façons de faire de la connectivité qui peut être incertaine. Vous pouvez vous en tirer et ce n'est pas complètement inutile, mais il est très rugueux autour des bords. Vous trouverez certaines choses sont laissées à la conjecture et de l'expérimentation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X