0

PyMongoを使用してMongoDBからデータをフェッチしています。コレクション内のすべてのドキュメントは、次の構造のようになります。

{
    "_id" : ObjectId("50755d055a953d6e7b1699b6"), 
    "actor":
    {
        "languages": ["nl"]
    },
    "language":
    {
        "value": "nl"
    }
}

language.valueプロパティがプロパティ内にあるすべての会話をフェッチしようとしていますactor.languages

現時点では、内部に一定の値を持つすべての会話を探す方法を知っています actor.languages(たとえば、内部にenactor.languagesがあるすべての会話)。

language.valueしかし、現在のドキュメント内の変数値()を使用して同じ比較を行う方法に固執しています。

どんな助けでも大歓迎です、事前に感謝します!

4

2 に答える 2

1
db.testcoll.find({$where:"this.actor.languages.indexOf(this.language.value) >= 0"})
于 2012-11-28T09:08:42.813 に答える
1

クエリセットが小さい場合は使用できます$whereが、実際のサイズで問題が発生する可能性があります。特に、このクエリはページ上でリアルタイムで実行する必要があるようであり、JSエンジンは他の問題の中でもシングルスレッドであるためです。

language.valueこの場合、実際にはより良い方法を検討します。これは非常に簡単で、値の1つに基づいてレコードを引き出し、条件付きのdouble値を繰り返してテストします(つまり、nlとテストactor.languages値に基づいて引き出します)。その前の値の場合)。

集計フレームワークを使用してこれを実行できる可能性があると思いますが、最小では、内で計算フィールドを使用することはできません$match。私はそれがこのように見えると想像します:

{$project: 
     {languages_value: "$language.value", languages: "$actor.languages"}
}, {$match: {"$languages": {$in:"$languages_values"}}

できれば。しかし、方法があるかもしれません。

于 2012-11-28T12:42:45.963 に答える