0

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);
4

1 に答える 1

3

埋め込まれたドキュメントの配列があるため、データ構造をクエリするのは厄介です。データにわずかな変更を加えることで、これを簡単に操作できるようになります。

ユーザー ID を配列に入れました。

{
 "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 の同等のfind()を実行できます。

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"
}
于 2012-08-15T21:22:09.327 に答える