将LINQ查询转换为php mongodb查询格式

将LINQ查询转换为php mongodb查询格式,php,linq,mongodb,Php,Linq,Mongodb,我使用的是官方的C#mongodb驱动程序,它确实支持LINQ。但是我很难将其转换为使用php驱动程序 这是LINQ查询: .Where(c => DateTime.UtcNow.Subtract(c.DateRequested).TotalDays <= 14).Where(d => ((d.itemid == req.itemid) && (d.MediaType == req.MediaType)) && (d.Status != Requ

我使用的是官方的C#mongodb驱动程序,它确实支持LINQ。但是我很难将其转换为使用php驱动程序

这是LINQ查询:

.Where(c => DateTime.UtcNow.Subtract(c.DateRequested).TotalDays <= 14).Where(d => ((d.itemid == req.itemid) && (d.MediaType == req.MediaType)) && (d.Status != RequestStatus.Cancelled))
这是一张凌乱的表格:

array('$and' => array('DateRequested' => array('$gt' => new MongoDate((time() - 1209600)), '$lte' =>new MongoDate(time())),'$and' => array('$and' => array('itemid' => $itemid,'MediaType' => $source),'Account' => $account),'Status' => array('$ne' => 3)))

不确定我是否从上面的代码示例推断出了正确的文档结构,但假设在
mongo
shell中添加的测试文档类似于:

// Insert test data
db.mycoll.insert({
    'DateRequested': new Date(),
    'itemid': 76510,
    'MediaType': 0,
    'Account': 'Josh',
    'Status': 2
});
PHP中的示例搜索可能如下所示:

<?php
    $DAYS14 = 14 * 24 * 60 * 60; // Seconds in 14 days
    $CANCELLED = 3; // Status

    // Dummy search data
    $data['itemid']    = 76510;
    $data['mediatype'] = 0;
    $data['account']   = 'Josh';

    $query = array(
        '$and' => array(
            array('DateRequested' => array('$lt' => new MongoDate(time()))),
            array('DateRequested' => array('$gte' => new MongoDate(time() - $DAYS14))),
        ),
        'itemid'    => $data['itemid'],
        'MediaType' => $data['mediatype'],
        'Account'   => $data['account'],
        'Status'    => array('$ne' => $CANCELLED),
    );

    $document = $collection->findOne($query);

    // Peek at the result
    print_r($document);
?>


请注意,查询元素隐式使用“and”条件。如果需要重复同一字段(例如,
DateRequested
),则需要显式的
$和
,以便字段键不同。

谢谢。我不知道它含蓄地使用了“和”。回答风滚草问题的额外分数!
<?php
    $DAYS14 = 14 * 24 * 60 * 60; // Seconds in 14 days
    $CANCELLED = 3; // Status

    // Dummy search data
    $data['itemid']    = 76510;
    $data['mediatype'] = 0;
    $data['account']   = 'Josh';

    $query = array(
        '$and' => array(
            array('DateRequested' => array('$lt' => new MongoDate(time()))),
            array('DateRequested' => array('$gte' => new MongoDate(time() - $DAYS14))),
        ),
        'itemid'    => $data['itemid'],
        'MediaType' => $data['mediatype'],
        'Account'   => $data['account'],
        'Status'    => array('$ne' => $CANCELLED),
    );

    $document = $collection->findOne($query);

    // Peek at the result
    print_r($document);
?>