1

特定のデータ項目をフィルタリングするMongoDBデータベースを検索しようとしています。具体的には、フィルターにUSA=PG-13が必要です。

リクエストの方法:映画を入手するには、米国のMPAA = PG-13ですか?

収集国:

{
   "_id": ObjectId("4fd79ec34c9fda9d05000080"),
   "en": "USA" 
}
{
   "_id": ObjectId("4fd79ec34c9fda9d0500007f"),
   "en": "Hong Kong" 
}

コレクション映画:

{
   "_id": ObjectId("4fd79ec34c9fda9d05000081"),
   "movieId": {
     "imdb": "0848228" 
  },
   "movieTitle": "The Avengers",
   "movieYearSpan": {
     "start": "2012",
     "end": "2012" 
  },
   "movieType": "Movie",
   "movieMpaa": {
     "verdict": "Rated PG-13",
     "0": {
       "mpaa": "IIA",
       "country": ObjectId("4fd79ec34c9fda9d0500007f") 
    },
     "1": {
       "mpaa": "PG-13",
       "country": ObjectId("4fd79ec34c9fda9d05000080") 
    } 
  } 
}

最初にアメリカのIDを取得しようとしました。

$cursorCountry = $collectionCountry->find(array("en" => "USA"));
$idCountry = $cursorCountry->getNext();
$_id = $idCountry["_id"];
$cursorMovie = $collectionMovie->find(array("movieMpaa.country" => $_id, "movieMpaa.mpaa" => "PG-13"));

動作しません!では、どのようにリクエストを行うのですか?映画を入手するには、米国のMPAA = PG-13?

4

1 に答える 1

1

データがレイアウトされているため、ここには適切なクエリはありません。

moviesコレクションを次のように変更できる場合、クエリは機能します。

   "movieMpaa": {
     "verdict": "Rated PG-13",
     "countries": [
         {
           "mpaa": "IIA",
           "country": ObjectId("4fd79ec34c9fda9d0500007f") 
       },
         {
           "mpaa": "PG-13",
           "country": ObjectId("4fd79ec34c9fda9d05000080") 
        } 
     ]

movieMpaa.countriesがオブジェクトの配列である場合、その配列に対して をクエリできますmovieMpaa.countries.country。MongoDB は配列を認識し、オブジェクトに「ドリルイン」します。

ただし、これを構造化する別の方法があり、おそらく長期的にははるかに簡単です。

   "movieMpaa": {
     "verdict": "Rated PG-13",
     "countries": {
         ObjectId("4fd79ec34c9fda9d0500007f") : { "mpaa": "IIA" },
         ObjectId("4fd79ec34c9fda9d05000080") : { "mpaa": "PG-13" }
     }

国が 1 つの評価しか持てない場合、技術的にはそのcountries値は のディクショナリですCountries => ratings。上記の構造は、このようにそれらを格納します。

ただし、の使用はObjectId少し醜いです。countryコレクション内の ID をオーバーライドできることに注意してください。代わりに 2 文字または 3 文字の ISO コードを使用することを検討してください。これらは読みやすいです。

   "movieMpaa": {
     "verdict": "Rated PG-13",
     "countries": {
         "UK" : { "mpaa": "IIA" },
         "US" : { "mpaa": "PG-13" }
     }

db.movies.find({'movieMpaa.countries.US': 'PG-13'})
于 2012-06-13T01:01:28.813 に答える