0

私のアイテムは次のようにMongoDBに保存されます:

{"ProductName":"XXXX",
   "Catalogs" : [
    {
        "50008064" : "Apple"
    },
    {
        "50010566" : "Box"
    },
    {
        "50016422" : "Water"
    }
]}

ここで、カタログ:50008064 に属するすべてのアイテムを照会したいのですが、方法は? (カタログID「50008064」、カタログ名「Apple」)

4

2 に答える 2

3

これを効率的に照会することはできず、データが大きくなるにつれてパフォーマンスが低下します。そのため、私はそれをスキーマのバグと見なし、インデックス作成を可能にする次のモデルにリファクタリング/移行する必要があります。

{"ProductName":"XXXX",
   "Catalogs" : [
    {
        id : "50008064",
        value : "Apple"
    },
    {
        id : "50010566",
        value : "Box"
    },
    {
        id : "50016422",
        value : "Water"
    }
]}

そしてインデックス:

ensureIndex({'Catalogs.id':1})

繰り返しになりますが、スキーマを変更することを強くお勧めします。これは、他の方法では修正できない潜在的なパフォーマンスのボトルネックであるためです。

于 2012-04-10T09:55:20.853 に答える
0

リンクに記載されているように、これは非常に高速ではありませんが、これはおそらくここのエントリに従って機能するはずです。

db.products.find({ "Catalogs.50008064" : { $exists: true } } )
于 2012-04-10T07:20:13.167 に答える