2016-12-05 20 views
0
db.mice.find({'strains': {$in : [{mode:'++',name:'Str1'},{mode:'++',name:'Str2'}]}}).count() 
// returns 0 
db.mice.find({'strains': {$in : [{name:'Str1',mode:'++'},{name:'Str2',mode:'++'}]}}).count() 
// returns 1 

同じクエリを作成しますが、オブジェクト内のキーと値のペアの順序はどうやって無視しますか?mongodb - 演算子 - オブジェクトキーの順序を無視する

db.mice.find({'strains': {$elemMatch: {mode:'++', name:'Str1'}}}).count() 

$inが動作しない理由は、ので、それは配列フィールドの要素に対する全体の値と一致する上で動作することである:

+0

$は、配列の要素の順序に関係なく動作します。あなたはどんな問題を抱えていますか? –

答えて

2

あなたは、この場合に$elemMatch代わりの$inを使用したいと思いますあなたはオブジェクトを提供していますが、オブジェクトはフィールドの順序を含めて正確に一致しなければなりません。

ただし、$elemMatchの値はクエリオブジェクトとして解釈され、単一の値ではないため、フィールドの順序は関係ありません。

+1

このリストの項目1では、この動作について説明しています。[http://devblog.me/wtf-mongo](http://devblog.me/wtf-mongo) – JeremyK

+0

ありがとうございます.. .. about db.mice.find({ 'strains':{$ in:{name: 'Str1'、mode: '++'}、{name: 'Str2'、mode: '++'}}}})。count() – arx

+0

おそらく@arxそれらの正確なオブジェクトの1つを含む 'strains'配列を含むドキュメントがあるので、1のカウントを返します。 – JohnnyHK

関連する問題