MongoDB plusieurs $et les opérateurs de requête en PHP

Je vais avoir du mal avec ce MongoDB requête à l'aide de PHP syntaxe de tableau. Il s'agit d'une version de la requête que je veux utiliser.

db.collection.find({
        $or: [
            {$and : [{X:1}, {X: {$gt: 100}}]},
            {$and : [{X:2}, {X: {$lt: 100}}]}
        ]
});

Remarque: Le réel de la requête est plus compliqué, c'est juste un exemple.

Je n'étais pas en mesure de trouver quelques exemples décrivant ce type de requête en PHP.
Le meilleur que j'ai trouvé est celle-ci:

$query = array(
    '$or' => array(
        array(
            '$and' => array(
                array('X' => 1),
                array('X' => array('gt' => 100))
            )
        ),
        array(
            '$and' => array(
                array('X' => 2),
                array('X' => array('lt' => 100))
            )
        ),
    )
);

$this->db->collection->find($query);

Mais cette requête ne renvoie aucun résultat.
Nous ne pouvons évidemment pas supprimer $and de la matrice car nous ne pouvons pas avoir des doubles de clés en tableau PHP.

Je ne veux pas utiliser JavaScript expressions parce que la vitesse est critique.

Mise à JOUR: Comme Alexandre Azarov, a souligné dans les commentaires, ma requête peut être écrite différemment. J'ai mis à jour la question avec l'correctement utilisé $and requête.

Qu'est-ce exactement ne fonctionne pas? Avez-vous des messages d'erreur?
La requête s'exécute bien, mais renvoie 0 résultats.
Pourriez-vous poster un échantillon de données de vidage?
BTW, @ChristianP , vous n'avez pas besoin $and ici. {X:1, Y: {$all: [5,6,7]}} devrait fonctionner.
N'requête équivalente dans le shell mongo trouver ces documents?

OriginalL'auteur Christian P | 2012-01-01