0

コレクションに次のドキュメントがあるとします。

{
    "_id" : ObjectId("55aa9d35dccf57b64d34f448"),
    "a" : 1,
    "b" : 7,
    "c" : 0
}

{
    "_id" : ObjectId("55aa9d64dccf57b64d34f449"),
    "a" : 2,
    "b" : 8,
    "c" : 1
}

{
    "_id" : ObjectId("55aa9d6bdccf57b64d34f44a"),
    "a" : 2,
    "b" : 7,
    "c" : 0
}

のすべてのドキュメントを取得したい(a = 1 and b = 7) or (a = 2 and b = 8)。クエリは常に と のフィールドのみになりますがa、可能なとのペア (組み合わせ)bはおそらく 1 万通りになります。ab

$in演算子を使用してこの種のクエリを実行する方法はありますか?

そうでない場合、それを行うための最良の方法は何ですか?

4

1 に答える 1

1

構築しようとしている基になる MongoDB クエリは次のとおりです。

$or: [
    { a: 1, b: 7 },
    { a: 2, b: 8 }
]

これは、次のように直接変換されます。

Model.where(:$or => [
    { :a => 1, :b => 7 },
    { :a => 2, :b => 8 }
])

orまたは、次の方法を使用できます。

Model.or(
    { :a => 1, :b => 7 },
    { :a => 2, :b => 8 }
)

$inここでは必要ありません$in。単一のフィールドが配列の要素のいずれかと等しいかどうかを確認するために使用します。たとえば、これらは同等です。

where(:$or => [ { :a => 1 }, { :a => 2 } ])
where(:a => { :$in => [ 1, 2 ] })
where(:a.in => [ 1, 2 ]) # a short form of :a => { :$in => ... }

特定の s の$in特別な場合のショートカットも同様です。$or

于 2015-07-18T20:45:06.000 に答える