2011-08-17 9 views
2

J'ai exécuté la requête suivante sur une collection dans ma base de données mongodb.Résultats incohérents renvoyés par mongodb find query

db.coll.find({field_name:{$exists:true}}).count() et il a renvoyé 2437185. Le total des enregistrements signalés par db.coll.find({}).count() est 2437228.

Maintenant, quand je lance la requête db.coll.find({field_name:{$exists:false}}).count(), au lieu de retourner 43 il est revenu 0.

je les deux questions suivantes:

  1. Est-ce que le scénario ci-dessus signifie que les données dans ma collection a devenir corrompu?

  2. J'avais posté une question plus tôt à ce sujet à (Updating records in MongoDB through pymongo leads to deletion of most of them). La personne qui a répondu a déclaré que la mise à jour des données dans mongo db pourrait effacer les données mais ne pas les supprimer. Qu'est-ce que ça veut dire ?.

Merci

Répondre

5

Je crois que vous êtes en cours d'exécution dans le problème signalé à SERVER-1587. Quelle version de MongoDB utilisez-vous? Si elle est inférieure à 1.9.0, vous pouvez utiliser ce qui suit comme un travail autour:

db.coll.find({field_name: {$not: {$exists: true}}}).count() 

Quant à l'autre question, « occultant » dans ce cas signifie qu'une mise à jour peut changer la valeur ou supprime tous les champs d'un document, mais ne peut pas supprimer le document lui-même. La seule façon de supprimer un document est avec remove()

+1

Merci pour la réponse. J'ai essayé db.coll.find ({field_name: {$ not: {$ existe: vrai}}}). Count(), il renvoie toujours 0! En ce qui concerne la version de mongodb, quand je lance db.version() sur le shell, c'est 1.6.1. Quel pourrait être le problème ? –

+2

Êtes-vous capable de mettre à jour mongo? 1.6.x est assez vieux. 1.8.x est la série de production actuelle, et 2.0 est attendue dans les prochaines semaines. Les versions "impaires" (1.7.x, 1.9.x) sont des versions de développement non destinées à une utilisation en production. – dcrosta

Questions connexes