2012-07-08 12 views
5

Estoy tratando de almacenar el siguiente enlace:MongoDB: índices compuestos únicos y dispersas con valores dispersos

URL = { 
    hostname: 'i.imgur.com', 
    webid: 'qkELz.jpg' 
} 

Quiero un índice compuesto único y escaso en estos dos campos porque:

  1. Una combinación de hostname y webid debe ser única.
  2. webid siempre serán consultados con hostname.
  3. webid no tiene que ser globalmente único.
  4. A URL no necesita tener un webid.

Sin embargo, cuando hago esto, me sale el siguiente error:

MongoError: E11000 duplicate key error index: db.urls.$hostname_1_webid_1 dup key: { : "imgur.com", : null } 

supongo que en el caso de los índices compuestos, se cuentan los nulos, mientras que en los índices regulares, no lo son.

¿Hay alguna forma de solucionar este problema? Por ahora solo voy a indexar hostname y webid por separado.

+1

Para [índices únicos] (http://www.mongodb.org/display/DOCS/ Indexes # Indexes-unique% 3Atrue) (compuesto o no) no puede tener claves idénticas. Debería poder insertar un único registro con (nombre de host, nulo) pero el segundo con nombre de host idéntico será un duplicado. – Stennie

Respuesta

4

Tenga en cuenta que mongodb solo puede usar un índice por consulta (no unirá los índices para hacer una consulta en dos campos que tienen índices separados más rápidamente).

Dicho esto, si desea intentar verificar la exclusividad, podría hacer una consulta desde la aplicación antes de insertarla (lo que solo resuelve parcialmente el problema, porque hay un espacio vacío entre la consulta y la inserción).

Es posible que desee votar en esta JIRA para los índices filtrados, lo que probablemente le ayudará a su caso de uso: https://jira.mongodb.org/browse/SERVER-785

+0

oh. Entonces, ¿cómo decide qué índice trabajar? Ya controlo la singularidad antes de insertar. –

+0

Tiene un par de planes de consulta diferentes de los que se basa en función de la colección y la consulta: http://www.mongodb.org/display/DOCS/Optimization – ranman

Cuestiones relacionadas