Schéma:
var Post = mongoose.Schema({ title: Ssortingng, comments: [{user: Number, text: Ssortingng}] });
Code:
oldCount = myPost.comments.length; // for example 'n' myPost.comments.push({user: 42, text: 'blablabla'}); newCount = myPost.comments.length; // should be 'n+1' myPost.save(function (err) { ... });
Est-ce un code approprié?
Si le save()
sera exécuté après push()
?
Vais-je obtenir le nouveau compte correct?
Je pense que cela dépend de la fréquence à laquelle les commentaires seront ajoutés à votre message.
Si c’est très fréquent, vous voudrez peut-être obtenir le dernier compte de commentaires, qui serait dans votre rappel de sauvegarde comme suit:
myPost.comments.push({user: 42, text: 'blablabla'}); myPost.save(function (err, post) { newCount = post.comments.length });
Rappelez-vous que push () est atomique chez Mongoose. En d’autres termes, il utilise $ push sous le capot et non pas $ set (contraste avec nonAtomicPush ). Donc, en théorie, n’importe quel nombre d’autres envois / sauvegardes dans des commentaires peut se produire simultanément, ce qui signifie que dans votre exemple donné, comments.length n’est pas nécessairement n + 1.
Si vous n’attendez pas beaucoup de commentaires, votre exemple devrait suffire. Cela peut être moins précis de temps en temps. L’avantage est que ce sera un peu plus rapide car récupérer le compte sera synchrone