C'est une très bonne question, en termes simples, MongoDB ne garantit pas si le résultat contient de nouveaux documents car il implique plusieurs documents, même des documents qui pourraient être insérés dans le futur. Dans une base de données traditionnelle, il est possible de lire des valeurs nouvellement insérées. Cette anomalie est appelée Phantom. Le niveau d'isolement qui peut satisfaire cela est le plus élevé sérialisable, c'est-à-dire dans l'exemple, les deux ensembles d'opérations, une seule lecture. et une écriture, semblent être exécutées l'une après l'autre. Le coût de mise en œuvre du mécanisme de verrouillage est également très élevé et les performances sont relativement médiocres. Voir ce document. De retour à MongoDB, MongoDB utilise les documents comme unités et peut assurer une isolation au niveau du document, mais il ne garantit pas l'isolation (indépendance) des opérations entre plusieurs documents et ne prend pas en charge les transactions, en échange de hautes performances.
@huadu a raison. Lorsque vous testez, utilisez find().batchSize(2) pour lire 2 documents dans chaque lot, et vous constaterez que les documents nouvellement ajoutés peuvent être lus. La taille de lot par défaut dans le shell est de 20, ce qui peut ne pas être facile à observer. N'utilisez pas batchSize(1), qui est égal à limit() pour des raisons historiques.
Le curseur mongodb n'a pas d'isolation et peut renvoyer des données mises à jour.
Cependant, lors de tentatives réelles, il a été constaté que, quelle que soit la manière dont il était inséré, le curseur ne pouvait jamais renvoyer les données nouvellement insérées. Il peut s'agir d'un détail d'implémentation de mongodb, ou il se peut que le curseur ne puisse accéder aux données nouvellement insérées que dans certaines circonstances particulières. En bref, il n'existe aucun support de documentation et il ne faut pas se fier à ce comportement.
C'est une très bonne question, en termes simples, MongoDB ne garantit pas si le résultat contient de nouveaux documents car il implique plusieurs documents, même des documents qui pourraient être insérés dans le futur. Dans une base de données traditionnelle, il est possible de lire des valeurs nouvellement insérées. Cette anomalie est appelée Phantom. Le niveau d'isolement qui peut satisfaire cela est le plus élevé sérialisable, c'est-à-dire dans l'exemple, les deux ensembles d'opérations, une seule lecture. et une écriture, semblent être exécutées l'une après l'autre. Le coût de mise en œuvre du mécanisme de verrouillage est également très élevé et les performances sont relativement médiocres. Voir ce document. De retour à MongoDB, MongoDB utilise les documents comme unités et peut assurer une isolation au niveau du document, mais il ne garantit pas l'isolation (indépendance) des opérations entre plusieurs documents et ne prend pas en charge les transactions, en échange de hautes performances.
@huadu a raison. Lorsque vous testez, utilisez
find().batchSize(2)
pour lire 2 documents dans chaque lot, et vous constaterez que les documents nouvellement ajoutés peuvent être lus. La taille de lot par défaut dans le shell est de 20, ce qui peut ne pas être facile à observer. N'utilisez pas batchSize(1), qui est égal à limit() pour des raisons historiques.Pas nécessairement.
Le curseur mongodb n'a pas d'isolation et peut renvoyer des données mises à jour.
Cependant, lors de tentatives réelles, il a été constaté que, quelle que soit la manière dont il était inséré, le curseur ne pouvait jamais renvoyer les données nouvellement insérées. Il peut s'agir d'un détail d'implémentation de mongodb, ou il se peut que le curseur ne puisse accéder aux données nouvellement insérées que dans certaines circonstances particulières. En bref, il n'existe aucun support de documentation et il ne faut pas se fier à ce comportement.