2012-06-20 30 views
1

我有一个网站访问者的信息集合,每个访问者都有关于它们的各种信息,包括销售人员是否让他们“锁定”。目前我有以下代码:如果OR语句在Mongo/PHP

$db = $conn->Surreal; 
$collection = $db->visitors; 
$criteria = array(
    'locked_by' => $_REQUEST['ownerkey'], 
); 
$criteriat = array(
    'locked_by' => null, 
); 
$cursor = $collection->find($criteria); 
$cursort = $collection->find($criteriat); 
//echo $doc->count() . ' document(s) found. <br/>'; 
foreach ($cursor as $doc) { 
    //List all 
    if($doc['locked_by'] ==null) $doc['locked_by'] = " "; 
    $pieces = explode("&&", $doc['location']); 
    echo('Surreal - '.$doc['name'].'//'.$doc['uuid'].'//'.$doc['uuid'].'//'.$doc['locked_by'].'//'.$doc['location'].'*');  
} 
foreach ($cursort as $doc) { 
    //List all 
    if($doc['locked_by'] ==null) $doc['locked_by'] = " "; 
    $pieces = explode("&&", $doc['location']); 
    echo('Surreal - '.$doc['name'].'//'.$doc['uuid'].'//'.$doc['uuid'].'//'.$doc['locked_by'].'//'.$doc['location'].'*');  
} 

基本上使用两个foreach语句回显信息。我能以某种方式代替使用查询说基本

if(locked_by == "RANDOM" || locked_by == null) 

回答

1

好,MongoDB的支持或查询条件,从1.5.3版本开始:

db.foo.find({ $or : [ { a : 1 } , { b : 2 } ] }) 

...所以它应该是这样来实现:

$criteria = array(
    '$or' => array(array('locked_by' => 'RANDOM'), array('locked_by' => null)) 
); 

问题它是否使用您使用的驱动程序支持此类查询。我在使用这种特殊类型时遇到了一些困难,但那是一年前的事情;我想事情可能会变得最好。 )

更新:至少有一个类似的查询here in comments,所以我猜DID变成最好的东西。 )

+0

谢谢,这工作完美。如果可以,还有一个问题。我会如何排序以使lock_by not null条目最先出现? – Michael

+1

您应该按照相反的顺序通过'locked_by'列对结果进行排序,然后,我想。 – raina77ow

0

raina77ow的答案应该足够了,但我总能找到下页可用于确定什么用或语句和大于需要等

MongoDB Operators

你需要把它变成了PHP数组形式目的,但语法是相似和很好的参考。