La base de données est proche de 5 Go. J'ai des documents comme: Je veux retourner les utilisateurs qui ont plus de 0 "hobbies"
J'ai essayé p> et il prend tout RAM et aucun résultat. P> tia p> P.s.
Près de J'ai trouvé:
"Ajoutez un nouveau champ à la taille de la catégorie. C'est une pratique habituelle dans le monde de Mongo."
est-ce vrai? p> p>
6 Réponses :
Questions antérieures Expliquez comment gérer le problème du nombre de matrices. Bien que dans votre cas, si zéro est vraiment la seule valeur que vous souhaitez tester, vous pouvez définir la matrice sur NULL lorsqu'il est vide et définir l'option pour ne pas le sérialiser, vous pouvez alors tester l'existence de ce champ. N'oubliez pas de tester pour NULL et de créer la matrice lorsque vous souhaitez ajouter un passe-temps à un utilisateur. P>
Pour # 2, à condition que vous ayez ajouté le champ de comptage, il est facile de sélectionner les champs que vous souhaitez revenir dans la base de données et d'inclure le champ de comptage. P>
c'est un peu vrai.
Selon le manuel P>
http://www.mongodb.org/display/docs/advanced+Queries#advancedQueries-%24Size P>
$ Taille p>
L'opérateur $ Taille correspond à n'importe quel tableau avec le nombre spécifié de éléments. L'exemple suivant correspondrait à l'objet {A: ["FOO"]}, Puisque ce tableau n'a qu'un seul élément: p> blockQuote>
xxx pré> Vous ne pouvez pas utiliser $ Taille pour trouver une gamme de tailles (par exemple: tableaux avec plus de 1 élément). Si vous avez besoin d'interroger pour une gamme, créez un champ de taille supplémentaire que vous incrémentez lorsque vous ajoutez des éléments i> p> blockQuote>
Vous pouvez donc vérifier la taille de la matrice 0, mais pas pour des choses comme "plus grandes 0 ' p> p> p>
Si vous n'avez besoin de trouver que zéro passe-temps, et si la touche Hobbies n'est pas définie pour une personne avec zéro passe-temps, utilisez un drapeau existant. Ajouter un index sur "Hobbies" pour améliorer la performance: P>
db.collection.find ({hobbies: {$ existe: true}}); p> li>
Cependant, si la personne avec zéro passe-temps a une matrice vide et que la personne avec 1 passe-temps a une matrice avec 1 élément, utilisez cette solution générique: p> li>
Maintenir une variable appelée "hCount" (nombre de loisirs) et toujours la définir à la taille de la taille de la matrice Hobbies dans n'importe quelle mise à jour.
Index sur le terrain "HCount"
Ensuite, vous pouvez faire une requête comme: p> 3 - de @johnps réponse, "$ taille" est également un bon opérateur à cette fin.
http://www.mongodb.org/display/docs/advanced+ Requêtes #
p> ol>
Avez-vous essayé d'utiliser hobbies.length code>. Je n'ai pas testé cela, mais je pense que c'est la bonne façon d'interroger la plage de la matrice dans MongoDB
db.collection.find({$where: '(this.hobbies.length > 0)'})
Cela fonctionne - mais sur une petite quantité de données. Pour ma tâche, il semble que je doive maintenir la variable "compter".
Dans ce cas particulier, vous pouvez utiliser l'indexation de la liste pour résoudre votre problème: P>
Cela garantit simplement à un 0ème élément existant. Vous pouvez faire la même chose pour vous assurer que la liste est plus courte que N ou entre X et Y en vérifiant les éléments existants aux extrémités de la plage. P> db.collection.find ({"hobbies.0": {$ existe: true}}). Limite (10) Code> P>
Vous pouvez (sorte de) vérifier une plage de longueurs de tableau avec l'opérateur code> $ code> à l'aide d'un logique code> pas code>:
Cela semble être la réponse la plus applicable à un tableau qui a une taille non nulle.