sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Puede un campo de lista ser una clave de fragmento en MongoDB?

Basado en algunos de los comentarios que recibo que parecen afirmar que no es posible fragmentar usando un campo de lista como clave de fragmento, quería ilustrar cómo este caso de uso podría fragmentarse usando las limitaciones de MongoDB:

Objeto original:

widget:
{
    primary_key: '2389sdjsdafnlfda'

    categories: ['hair', 'nails', 'dress']
    colors:     ['red', 'white']

    #All the other fields in the document that don't need to be queried upon: 
    ...
    ...
}

La capa de datos divide el objeto en múltiples objetos de puntero según la cantidad de elementos en el campo elegido para la clave de fragmento:

widget_pointer:
{
    primary_key: '2389sdjsdafnlfda'
    categories: 'hair',
    colors:     ['red', 'white']
}

widget_pointer:
{
    primary_key: '2389sdjsdafnlfda'
    categories: 'nails',
    colors:     ['red', 'white']
}

widget_pointer:
{
    primary_key: '2389sdjsdafnlfda'
    categories: 'dress',
    colors:     ['red', 'white']
}

Explicación:

  • El campo categories ahora puede ser la clave de fragmento en MongoDB.
  • El objeto original ahora se almacenará en un almacén de clave-valor. Las consultas contra los datos en MongoDB devolverán un objeto de puntero que se usará para obtener el objeto del almacén de clave-valor.
  • Las consultas sobre los datos de MongoDB afectarán solo a un fragmento.
  • Las inserciones en los datos de MongoDB afectarán tantos fragmentos como elementos haya en la lista; en la mayoría de los casos, solo se verá afectado un pequeño subconjunto del número total de fragmentos.