8

解決策はおそらく私を正面から見つめているでしょうが、私はそれを見つけることができませんでした。私の問題は、指定されたDBRefを含むすべてのドキュメントを検索する必要があることです。検索するコレクションの構造は次のとおりです。

{
    "_id" : ObjectId("4e2d4892580fd602eb000003"),
    "date_added" : ISODate("2011-07-25T11:42:26.395Z"),
    "date_updated" : ISODate("2011-07-25T11:43:09.870Z"),
    ...
    "a_list_of_dbrefs" : [
        {
            "$ref" : "somecollection"
            "$id" : "4e2d48ab580fd602eb000004"
        }
    ],
    ...
    "name" : "some name"
}

に表示されるDBRefに基づいて一連のドキュメントを取得できるようにする必要がありますa_list_of_dbrefsa_list_of_dbrefsDBRefが含まれていないもの、1つ含まれているもの、1つ以上含まれているものがあります)。

これはどのように達成されますか?

4

2 に答える 2

20

これを試してみてください、それは私のために働きました:

db.<your collection>.find({"a_list_of_dbrefs.$id": ObjectID("4e2d48ab580fd602eb000004")})

コレクションへの参照を持つすべての要素を取得することもできます。

db.<your collection>.find({"a_list_of_dbrefs.$ref": "somecollection"})
于 2013-03-30T04:25:44.713 に答える
2

参照されているコレクションの名前がわかっていると仮定して、参照されているドキュメントのDBRefを単に保存するために、をダンプすることをお勧めします。_id

DBRefMongoDBでサーバー側から(単一のステップで)配列を「解決」する方法は絶対にありません。クライアントで配列をループし、各ドキュメントを個別に解決する必要があります。

逆に、参照された配列だけを格納する場合は、その配列を取得してから、クエリを_id使用してすべてをフェッチできます。$in

したがって、ドキュメントは次のように変更される可能性があります。

{
    "_id" : ObjectId("4e2d4892580fd602eb000003"),
    "date_added" : ISODate("2011-07-25T11:42:26.395Z"),
    "date_updated" : ISODate("2011-07-25T11:43:09.870Z"),
    ...
    "references": [
        ObjectId(123), ObjectId(234), ObjectId(567), ObjectId(891)
    ],
    ...
    "name" : "some name"
}

references次に、フィールドの内容を使用してMongoDBにクエリを実行できます。

db.somecollection.find({"_id": {"$in": references}})
于 2011-07-27T16:01:21.847 に答える