2016-10-05 7 views
0

$とを使用してフィールドに複数の値を一致させ、$ inに$ matchを使用することには違いがありますか?

db.collectionOne.aggregate([ 
{$match:{name:{'$in':['Jack','Jill']}, 
     city:{'$in':['LA','NY']} 
     } 
     }]) 

または

db.collectionOne.aggregate([ 
{$match:{ 
    $and:[{name:{'$in':['Jack','Jill']}, 
     city:{'$in':['LA','NY']} 
     } 
    ]} 
}]) 

または$なければならないとだけ良いパフォーマンスを得るために、数値のために使用することが?

答えて

0

まず、あなたの例にはタイプミスがあると思います。それは

db.collectionOne.aggregate([ 
{$match:{ 
    $and:[{name:{'$in':['Jack','Jill']}}, 
     {city:{'$in':['LA','NY']} 
     } 
    ]} 
}]) 

でなければなりませんし、使用スニペットの両方が注意

カンマを指定するときにMongoDBは暗黙のAND演算を提供https://docs.mongodb.com/manual/reference/operator/query/and/

このページで言及同じです 式の区切りリスト。同じフィールドまたは演算子が複数の式で指定された である必要がある場合は、$と 演算子との明示的ANDを使用する必要があります。

したがって、以下のように、同じキーに2つの条件を適用する必要がある場合は、$を使用します。上記の例

db.collectionOne.aggregate([ 
{$match:{ 
    $and:[{name:{'$in':['Jack','Jill','Bill','Kill']}}, 
     {name:{'$nin':['Matt','Bill']} 
     } 
    ]} 
}]) 

良くありませんが、それはそこにタイプミスがありませんが、同じクエリが両方の方法(鉱山とURS)を使用することができシナリオ

+0

を説明します。しかし、私はそれが良い例ではないことをあなたのポイントを得る。私はちょうど 'db.collectionOne.aggregateを使用しています( {$ name:{'$ in':['Jack'、 'Jill'、 'Bill'、 'Kill']}、 name:{' $と$ 'を使用する代わりに、[' Matt '、' Bill ']} } }これらの2つのパフォーマンスの違いは何ですか? – cartman619

+0

$と私の答えで述べたように、単一のフィールドで複数の条件を実装するために使用することが意図されて、 しかし、あなたは使用方法が正しくない db.collectionOne.aggregate([ {$マッチので、私はタイプミスを言いました: {$と:{{名前:{'$':['ジャック'、 'ジル'、 'ビル'、 'キル'}}、 名前:{'$ nin':['Matt'、 'Bill ']} } } }]) –

+0

私は尋ねる前に同じページを見ましたが、ドキュメントは$とブール型のAND演算に使用する方が意味があります。しかし、実行するブール型の操作がない場合でも、多くの人が$一致の代わりに$一致を使用していることがわかりました。 – cartman619

関連する問題