0

私はMongoDBinActionを読んでいて、ドキュメント内の多対多の関係のクエリについて話しているとき、彼が(Rubyドライバーを使用して)クエリの例をどのように書いたかを理解するのに苦労しています。

クエリはproductscategoryコレクションがある特定のカテゴリのすべての製品を検索しています。著者は、「ガーデニングツールカテゴリのすべての製品をクエリするには、コードは単純です。

db.products.find({category_ids => category['id']})

PRODUCTドキュメントは次のようになります。

doc =
{ _id: new ObjectId("4c4b1476238d3b4dd5003981"),
  slug: "wheel-barrow-9092",
  sku: "9092",
  name: "Extra Large Wheel Barrow",
  description: "Heavy duty wheel barrow...",

  details: {
    weight: 47,
    weight_units: "lbs",
    model_num: 4039283402,
    manufacturer: "Acme",
    color: "Green"
  },

  category_ids: [new ObjectId("6a5b1476238d3b4dd5000048"),
                    new ObjectId("6a5b1476238d3b4dd5000049")],

  main_cat_id: new ObjectId("6a5b1476238d3b4dd5000048"),

  tags: ["tools", "gardening", "soil"],

}

そして、CATEGORYドキュメントは次のようなものです。

doc =
{  _id: new ObjectId("6a5b1476238d3b4dd5000048"),
   slug: "gardening-tools",
   ancestors: [{ name: "Home",
                 _id: new ObjectId("8b87fb1476238d3b4dd500003"),
                 slug: "home"
                },

                { name: "Outdoors",
                 _id:  new ObjectId("9a9fb1476238d3b4dd5000001"),
                 slug: "outdoors"
               }
   ],

   parent_id: new ObjectId("9a9fb1476238d3b4dd5000001"),

   name: "Gardening Tools",
   description: "Gardening gadgets galore!",
}

誰かが私にそれをもう少し説明してもらえますか?彼がそのクエリをどのように書いたかはまだ理解できません:(

皆さんありがとう。

4

1 に答える 1

3

category['id']クエリは、フィールドにの値を持つすべての製品の製品コレクションを検索していますcategory_ids

特定の値の配列を含むフィールドを検索すると、MongoDBはその配​​列内の各値を自動的に列挙して、一致するものを検索します。

クエリを作成するには、最初にcategoryコレクションがカテゴリ階層を定義し、各カテゴリが一意のIDを持っていることに注意する必要があります(MongoDBで通常行われているように、_idフィールドに保存されます)

また、コレクションには、コレクションの一意のIDを参照するproductカテゴリIDのリストを格納するフィールドがあることに注意する必要があります。category_idscategory

したがって、特定のカテゴリのすべての製品を検索するには、コレクションのcategory_idsフィールドで、productコレクションから取得した関心のあるカテゴリの一意のIDを検索しますcategory

mongoガーデニングツールカテゴリの製品を見つけるMongojavascriptベースのシェルインタープリターのクエリを作成する場合は、次のようにします。

  1. ガーデニングツールカテゴリのIDを検索します(前述のように、コレクション の_idフィールドに保存されています)category
    • この場合、例の値は次のようになります。ObjectId("6a5b1476238d3b4dd5000048")
  2. コレクション のcategory_idsフィールドを検索するクエリに値を挿入しますproduct
    • これはあなたがあなたの質問で与える質問です、それはmongo私がシェルのために書くでしょう:db.products.find({category_ids : new ObjectId("6a5b1476238d3b4dd5000048")})

それが元の説明よりも明確であることを願っています!

(余談ですが、クエリがどの言語で書かれているのかよくわかりません。おそらくPHPですか?いずれにせよ、MongoDBサーバーがmongoコマンドラインをインストールするため、MongoDBドキュメントの例ではjavascriptが選択される言語のようです。サーバー自体と一緒にインタプリタなので、誰もがそれにアクセスできます)

于 2012-05-28T21:48:59.623 に答える