2013-11-03 141 views
-1

比方說,我們有以下的MongoDB收集:文檔精確匹配

{id:1, data:"some_data"} 
{id:2, data:"some_data"} 
{id:3, data:"some_data"} 
{id:4, data:"some_data"} 

我也有一個PHP的數組元素「6」是不是集合

$q = [1,3,6]; 

如果我在查詢集合是這樣的:

$cursor = $db->col->find(['id' => ['$in' => $q]]); 

我越來越有ID的1和3

文件

但我想有一個空的結果,因爲id 6不存在於集合中, 我該如何精確匹配集合?

我可以只用一個查詢來做到這一點嗎?

+0

如果'q = [1,3]'',您想得到什麼? –

+0

當然只有id爲1和3的文檔,但僅僅是因爲它們當前在集合中。 – user2624744

+0

所以如果'q = [1,3,6]',你想'找到'給你回0,1,2或3個文件嗎? –

回答

0

如果id是獨一無二的:

var result = db.col.find({id:{$in:q}}); 
if(result.count() == q.length) { 
    //handle result 
} else { 
    //handle empty result 
} 
+0

但是如果想用PHP來做呢? 假設我有一個php數組: $ q = [1,2,3,6]; (''id'=> ['$''=> $ q]]);} $; $'$'$> 此查詢是否會拉下所有數據? – user2624744

+0

我建議在你的問題中詢問並添加適當的標籤。我親自迴避PHP。 –

0

你不能這樣做只是一個MongoDB的查詢,因爲它不具備這樣的功能。

此外,我不明白爲什麼你究竟需要這個,你能實現它做這樣的事情:

$q = [1,3,6]; 
$res = array(); 
$cursor = $db->col->find(['id' => ['$in' => $q]]); 
foreach($cursor as $val){ 
    $res[$val['id']] = $val['data']; 
} 

foreach($q as $val){ 
if (!isset($res[$val])) $res[$val] = ''; // to show that there is nothing in the results. 
} 

附:我沒有試過這段代碼,所以可能會有錯誤。