0

私はmongoに次の構造を持っています

{
    "_id": ObjectId("5188deba4c2c989909000000"),
        "_type": {
            "0": "Model_Discs"
        }
    },
    "title": "really cool cd",
    "referencedBy": {
         "0": {
           "$ref": "discs",
           "$id": ObjectId("4e171cade3a9f23359e98552") 
        },
         "1": {
           "$ref": "discs",
           "$id": ObjectId("5045c3222b0a82ec46000000") 
        } 
    }
}

これは実際には、他のドキュメントへの参照を保持するインデックス付き配列です。ObjectId("5045c3222b0a82ec46000000") への参照を持つすべてのドキュメントを検索します。最初に、"referencedBy.1.$id": ObjectId("5045c3222b0a82ec46000000") を書きましたが、これは (期待どおり) 動作しません。これは、ObjectId が他のドキュメントの異なるインデックスの下にあるためです。

referencedBy.1.$id
referencedBy.5.$id
referencedBy.3.$id

したがって、referencedBy DocumentSet の下にある ObjectId を参照するすべてのドキュメントを見つける必要があります。何かのようなもの

"referencedBy.*.$id": ObjectId("5045c3222b0a82ec46000000")
4

1 に答える 1

1

なぜこんなに複雑な構造になっているのか、よくわかりません。特に "0" と "1" のキーは問題があり、数値文字列キーを持つ配列をあまり好まない PHP を扱う場合は特にそうです。$ref/$id フィールドは MongoDBRef から取得されます。MongoDBRef は機能を提供しないため、回避する必要があります。

あなたはただ持っているべきです:

{
    "_id": ObjectId("5188deba4c2c989909000000"),
    "_type": "Model_Discs",
    "title": "really cool cd",
    "referencedBy": [
        ObjectId("4e171cade3a9f23359e98552"),
        ObjectId("5045c3222b0a82ec46000000") 
    ]
}

次に、次のように簡単にクエリできます。

db.collection.find( { referencedBy: new ObjectId("5045c3222b0a82ec46000000") } );
于 2013-07-12T15:48:13.420 に答える