2017-10-09 2 views
0

Nous avons une très grande collection, avec plusieurs index.requête pour les valeurs de clé indexées qui a le plus de références?

Depuis un index est essentiellement une table avec le champ indexé comme la clé, et une liste des ObjectID s comme valeur, nous nous demandions si nous pouvions obtenir la clé qui a le plus grand nombre de Objects il pointe.

Par exemple, si nous avons une collection:

{ _id: 1, a : 1, b : 1 }, 
{ _id: 2, a : 2, b : 2 }, 
{ _id: 3, a : 2, b : 3 }, 
{ _id: 4, a : 2, b : 4 }, 
{ _id: 5, a : 3, b : 4 }, 
{ _id: 6, a : 3, b : 4 }, 
{ _id: 7, a : 4, b : 4 } 

Là où il y a un indice de "a". Je suppose qu'il y une table quelque part qui ressemble à ceci:

index a: 

"1" => [ 1 ], 
"2" => [ 2, 3, 4 ], 
"3" => [ 5, 6 ], 
"4" => [ 7 ] 

Dans ce cas, nous aimerions interroger en quelque sorte pour la valeur d'index avec la plus longue liste d'objets - « 2 ».

Est-ce que quelque chose comme ça est possible dans MongoDB?

Répondre

0

La réponse est non.

En fait, les index ne possèdent pas de liste d'objets de document, seulement des pointeurs vers les données. Pour obtenir l'objet objectId du document, le système doit aller sur le disque pour le lire. C'est pourquoi, si vous avez un index ce qui peut répondre à votre requête et vous n'avez pas besoin de _id dans votre résultat, rappelez-vous toujours project {_id: 0, key1: 1, key2: 1, keyX: 1} ainsi le résultat peut être retourné de l'index et il n'y a pas besoin d'aller sur le disque.