1

非常に簡単な方法で私の質問をさせてください。これ:

{
    "name": {
        "first": "Joe",
        "last": "Coconut"
    }
}

またはこれ:

{
    "first_name": "Joe",
    "last_name": "Coconut"
}

しかし、非常に基本的な形で。5 つのネストされたオブジェクトと、より多くの列を持つ 2 つのネストされたオブジェクトのどちらかを使用できるとしたら?!

-- オリジナル -- mongoDB でのデータのモデリングはアプリケーションの使用に関連していることは理解していますが、原則としてどちらのモデルが優れているのでしょうか?

{
    "company": "Amc",
    "clients": [
        {
            "name": "10Gen",
            "contact": "01002033",
            "contracts": {
                "id": 123,
                "price": 1200
            }
        },
        {
            "name": "Sun",
            "contact": "677689",
            "contracts": {
                "id": 23,
                "price": 34000
            }
        }
    ]
}

{
    "company": "Amc",
    "10Gen": {
        "123": 1200,
        "contact": "01002033"
    },
    "Sun": {
        "23": 34000,
        "contact": "677689"
    }
}

アプリケーション層がほとんどの操作を処理するため、2 番目のアプローチの方が適切ではありませんか?

データをより適切に構造化するために、データをネストするのは悪い習慣ですか? 入れ子になったドキュメントが 5 つあるとしますか?

私は非常に明白な事実を見逃していますか?

4

2 に答える 2

3

参考までに:

非常に大きなドキュメントを考えてみましょう。以下の例を考えてみましょう (私はドキュメントに小さなキーを入れました)。そして、次の 2 つの更新を検討してください。

db.mytest.update({b_e : 1}, {$set : { b_e : 2}})
db.mytest.update({'b.e' : 1}, {$set : { 'b.e' : 2}})

2 番目のケースの MongoDB 更新では、キーの繰り返しが少なくて済むため、比較的簡単に更新できます。CPU アクティビティは、2 回目の更新で比較的少なくなります。この問題は、ドキュメントに膨大な数のキーが含まれている場合に気付くでしょう。あなたの場合、ドキュメントは非常に小さいので問題ありません。

Mongo > db.mytest.find().pretty()
{
    "_id" : ObjectId("5188aae4eadc531d7386f524"),
    "a_b" : 1,
    "a_c" : 1,
    "b_c" : 1,
    "b_d" : 1,
    "b_e" : 1
}
{
    "_id" : ObjectId("5188ab14eadc531d7386f525"),
    "a" : {
        "b" : 1,
        "c" : 1
    },
    "b" : {
        "c" : 1,
        "d" : 1,
        "e" : 1
    }
}
于 2013-05-07T07:30:32.390 に答える