将LINQ查询转换为php mongodb查询格式
我使用的是官方的C#mongodb驱动程序,它确实支持LINQ。但是我很难将其转换为使用php驱动程序 这是LINQ查询:将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
.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);
?>