4

私はMongoDBに次のようなドキュメントを持っています:

{
"user": ObjectID("4d71076b26ab7b032800009f")
"pages" : [
    {
        "name" : "Main",
        "content" : [
            {
                "id" : ObjectId("4d71076b26ab7b052800009f")
            },
            {
                "id" : ObjectId("4d61269b1deb5a3fce000004"),
                "link" : "http://example.com"
            }
        ]
    }
]}

キー「ページ」が他のドキュメントとの配列であることがわかります。これで、このドキュメントをページの名前でクエリでき、すべてのページとその他の情報を含む完全なドキュメントを取得できます。私はPythonで直接pymongoを使用してドキュメントをクエリしていますが、配列ページからページを取得するのに最適な方法がわかりません。私はこのようなものだと思います:

def getPage(pageNameWhoINeed):
    for page in pages:
        if page['name'] == pageNameWhoINeed:
           return page

しかし、これは単一のページまたは一般的な埋め込みドキュメントを取得するための最良の方法ですか?すべてのヒントまたはコードスニペットを歓迎します。

ありがとう!ヤルス

4

2 に答える 2

2

はい、その通りです。mongodbでは、親なしで埋め込みドキュメントをロードすることはできません。子ドキュメントのプロパティによって親ドキュメントをロードできます。

pages.find({"pages.name", "Main"}); //should load all document that contains pages  collection and at least one item in embedded collection with name 'Main'.

すべての埋め込みドキュメントを反復処理する必要があるよりも、必要な検索ページを見つける必要があります。

埋め込まれたドキュメントを頻繁にロードする必要がある場合は、データベースを再設計する必要があります(ページをルートコレクションに移動しますが、スキーマはすべて問題ないようです)。

于 2011-03-05T16:26:45.920 に答える
0

mongodbWebサイトのフィールドのサブセットの取得をお読みください。

お役に立てば幸いです。

于 2011-03-09T09:59:59.167 に答える