MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como encontrar um documento por item incorporado no MongoDB PHP


Sua estrutura de dados é difícil de consultar porque você tem uma matriz de documentos incorporados. Com uma pequena alteração nos dados, você pode tornar isso mais fácil de trabalhar.

Eu coloquei os IDs de usuário em uma 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"
}

Você poderia então fazer o equivalente PHP find() por:
db.contest.find(
        {'teams.members':'50247314f501384b011019bc'},
        {'contestname':1, 'description':1}
    )

Que retornaria os concursos correspondentes que esse usuário entrou:
{
    "_id" : ObjectId("502c108dcbfbffa8b2ead5d2"),
    "contestname" : "Contest1",
    "description" : "java programming contest"
}
{
    "_id" : ObjectId("502c10a1cbfbffa8b2ead5d4"),
    "contestname" : "Contest3",
    "description" : "Grovy programming contest"
}