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

Cómo encontrar un documento por elemento incrustado en MongoDB PHP

Su estructura de datos es difícil de consultar porque tiene una serie de documentos incrustados. Con un ligero cambio en los datos, podría facilitar el trabajo.

He puesto los ID de usuario en una matriz:

{
 "contestname": "Contest1",  
 "description": "java programming contest", 
 "numteams": 2,
 "teams": [
   {
    "teamname": "superstars",
    "members": [
        "50247314f501384b011019bc",
        "50293cf9f50138446411001c",
        "50293cdff501384464110018"
    ]
   },

   {
    "teamname": "faculty",
    "members": [
        "50247314f501384b0110100c",
        "50293cf9f50138446410001b",
        "50293cdff501384464000019"
    ]
   }
 ],
 "term": "Fall 2012"
}

Luego podría hacer el equivalente de PHP find() para:

db.contest.find(
        {'teams.members':'50247314f501384b011019bc'},
        {'contestname':1, 'description':1}
    )

Lo que devolvería los concursos coincidentes que este usuario había ingresado:

{
    "_id" : ObjectId("502c108dcbfbffa8b2ead5d2"),
    "contestname" : "Contest1",
    "description" : "java programming contest"
}
{
    "_id" : ObjectId("502c10a1cbfbffa8b2ead5d4"),
    "contestname" : "Contest3",
    "description" : "Grovy programming contest"
}