PHP和MongoDB:使用多个'$或';


PHP and MongoDB: Using multiple '$or'

我正试图将此查询转换为数组,以便在PHP中使用,但我遇到了"index"问题。。。正如您所看到的,我需要倍数'$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'域的文档。第二组验证"type"字段,其中我需要将"comment"作为值或"post"的文档,并且"user_id"为123456。第三个集合验证"tags"字段,其中我需要在"$in"或"tags"=false"或"tags"不存在的内部有一些"tags.name"。。。

这3个集合必须是真的,这就是为什么它们都在"$和"运算符中。。。我知道'$and'只能在2.0+中工作,但我使用2.1(聚合框架测试…它只是摇滚!XD)

我想就是这样……如果有另一种写查询的方式,我真的很想看到。。。谢谢

以下是您在PHP 中的查询

$conn = new Mongo("localhost:$port");
$db = $conn->test;
$collection = $db->tb;
$or1 = 
    array( '$or' => array(
            array( 'author' => array( '$exists' => false ) ) ,
            array( 'author' => array( '$in' => array('john', false) ) ) 
          ));
$or2 = 
    array( '$or' => array(
        array( '$and' => 
                array( 
                    array( 'type' => 'post') ,
                    array( 'userid' => 123456 )
                    )
            ),
            array( 'type' => 'comment') 
        ));
$or3 = 
    array( '$or' => array(
            array( 'tags.name' => array( '$in' => array('tag1', 'tag2') ) ) ,
            array( 'tags' => false ), 
            array( 'tags' => array( '$exists' => false ) ) 
        ));
$query = array( '$and' => array( $or1, $or2, $or3 ) );

$cursor = $collection->find($query);
foreach( $cursor as $doc ) {
    // do something
}