У меня есть следующий документ в MongoDB:
Документ конкурса:
{ "_id": ObjectId("502aa915f50138d76d11112f7"), "contestname": "Contest1", "description": "java programming contest", "numteams": NumberInt(2), "teams": [ { "teamname": "superstars", "userid1": "50247314f501384b011019bc", "userid2": "50293cf9f50138446411001c", "userid3": "50293cdff501384464110018" }, { "teamname": "faculty", "userid1": "50247314f501384b0110100c", "userid2": "50293cf9f50138446410001b", "userid3": "50293cdff501384464000019" } ], "term": "Fall 2012" }
Представьте, что у меня есть больше, чем этот документ, где пользователи могут зарегистрироваться. Я хочу найти все конкурсы, которые зарегистрировал пользователь. У меня есть что-то вроде этого до сих пор:
$id = "50247314f501384b011019bc"; $user = array('userid1' => $id, 'userid2' => $id, 'userid3' => $id ); $team = array('teams' => $user); $result =$this->collection->find($team); return $result;
Может ли кто-нибудь помочь мне в этом?
Спасибо.
—— —— решаемые
$team = array('$or' => array(array('teams.userid1' => $id), array('teams.userid2' => $id), array('teams.userid3' => $id) )); $result =$this->collection->find($team);
Ваша структура данных неудобна для запроса, потому что у вас есть массив встроенных документов. С небольшим изменением данных вы можете упростить работу.
Я поместил идентификаторы пользователей в массив:
{ "contestname": "Contest1", "description": "java programming contest", "numteams": 2, "teams": [ { "teamname": "superstars", "members": [ "50247314f501384b011019bc", "50293cf9f50138446411001c", "50293cdff501384464110018" ] }, { "teamname": "faculty", "members": [ "50247314f501384b0110100c", "50293cf9f50138446410001b", "50293cdff501384464000019" ] } ], "term": "Fall 2012" }
Затем вы можете найти эквивалент PHP для поиска :
db.contest.find( {'teams.members':'50247314f501384b011019bc'}, {'contestname':1, 'description':1} )
Который вернет совпадающие конкурсы, которые этот пользователь ввел:
{ "_id" : ObjectId("502c108dcbfbffa8b2ead5d2"), "contestname" : "Contest1", "description" : "java programming contest" } { "_id" : ObjectId("502c10a1cbfbffa8b2ead5d4"), "contestname" : "Contest3", "description" : "Grovy programming contest" }