2013-06-25 116 views
0

我正在學習MongoDB的Doctrine 2 ODM,並有一個簡單的問題,我無法在Doctrines文檔或谷歌上找到答案。學說MongoDB ODM

說我有相同的集合

{ "_id" : ObjectId("51c8a962f6d6ace76b374219"), 
"X" : 26, 
"Name" : "some name", 
"Level" : "Common" 
} 
{ 
"_id" : ObjectId("51c8a9bef6d6ace76b37421a"), 
"Y" : 1, 
"Name" : "Other name", 
"Level" : "Common" 
} 

我知道我能找到具有級別的所有文件在以下兩個文件:共同使用

$dm->getRepository('Search\Model')->findBy(array("Level" => "Common")); 

但我怎麼能找到的所有文件,其中字段類型是「X」而不是「Y」? 我知道我可以返回所有並過濾掉,但我應該能夠查詢這個權利? 因爲字段類型X和Y是不同的,他們應該在一個單獨的集合?

我也試過使用查詢生成器的各種查詢,如在Doctrine文檔中,但沒有運氣。

我真的希望能夠返回那個集合中只有「X」的所有文檔。

非常感謝

回答

0

你可以在這裏使用否定運營商:

$dm->getRepository('Search\Model')->findBy(array("X" => 26, "Y" => array('$ne'=>1))); 
+0

感謝您的答覆。我真正想要的是找到所有具有X字段但不是Y的文檔。是否有一個通配符,我可以使用上面的X值....我猜最近的SQL等價物將是SELECT * from TABLE其中Column = X – user12345

+0

@ sb12您可以使用'存在',這將判斷該字段實際存在於文檔中:http://docs.mongodb.org/manual/reference/operator/exists/ – Sammaye

+0

感謝您的答覆。我會認爲這樣的事情很常見。我允許文檔中的不同字段的原因是由於mongo的無模式性質,因此假定查詢將是直接的。從學說docs我找不到方法來返回我所需要的。返回集合中的所有文檔並處理應用程序中的過濾是否是最佳實踐?我猜測性能不是問題,因爲返回遊標而不是所有數據?感謝您的幫助 – user12345