このクエリを配列に変換しようとしているので、PHP で使用できますが、「インデックス」の問題に悩まされています...ご覧のとおり、複数の「$or」が必要です。 or' は一連のフィールドを検証しますが、それらすべてを同じ '$or' で結合することはできません。
クエリ オブジェクトは次のとおりです。
{
'$and' : [
{ '$or' : [
{'author' : { '$exists' : false } }
, {'author' : { '$in' : [ 'john' , false ] } }
] }
, {'$or' : [
{ '$and' : [ { 'type' : 'post' } , { 'user_id' : 123456 } ] }
, { 'type' : 'comment' }
] }
, { '$or' : [
{ 'tags.name' : { '$in' : [ 'tag1' , 'tag2' ] } }
, { 'tags' : false }
, { 'tags' : { '$exists' : false } }
] }
]
}
'$or' の最初のセットは 'author' フィールドを検証するので、フィールドに 'john' または false を含むドキュメントを検索していますが、'author' フィールドを持たないドキュメントが必要です。2 番目のセットは「タイプ」フィールドを検証します。ここでは、値として「コメント」または「投稿」を持ち、かつ「user_id」が 123456 であるドキュメントが必要です。3 番目のセットは、いくつかの「タグ」が必要な「タグ」フィールドを検証します。 '$in' または 'tags' 内の .name = false または 'tags' が存在しません...
これらの 3 つのセットは true でなければなりません。そのため、それらはすべて「$and」演算子に含まれています...「$and」は 2.0+ でのみ機能することは承知していますが、2.1 を使用しています (集計フレームワーク テスト.. . それはまさに ROCKS! XD)
それだけだと思います...クエリを書く別の方法があれば、私は本当に見たいと思います...ありがとう!