次のようなコレクションがあるとします。
> db.test.find({}, {_id:0})
{ "name" : "star wars I", "duration" : 120 }
{ "name" : "star wars II", "duration" : 125 }
{ "name" : "star wars III", "duration" : 135 }
{ "name" : "star wars IV", "duration" : 115 }
{ "name" : "star trek I", "duration" : 135 }
{ "name" : "star trek II", "duration" : 200 }
{ "name" : "alien", "duration" : 200 }
この SQL ステートメントと同等のクエリを作成するにはどうすればよいですか?
SELECT * FROM test
WHERE (name LIKE '%star%' AND NOT name LIKE '%wars%') OR duration = 200
より単純なクエリでも、期待される結果を得ることができません。次に例を示します。
これは期待どおりに機能します。
> db.test.find({ name: /star/i, name: /trek/i }, {_id:0})
{ "name" : "star trek I", "duration" : 135 }
{ "name" : "star trek II", "duration" : 200 }
しかし、これは結果を返しません。なんで?
> db.test.find({ name: /star/i, $not: {name: /trek/i} }, {_id:0})