2015-04-22 55 views
1

如果你有這樣一個集合。如何顯式查詢字段並獲取所有可能的結果? Mongo

user { 
name: String, 
email: String, 
information: String 
} 

你會這樣做,得到所有約翰的醫生的信息列表。

db.user.find({name: "John", information: "doctor" }); 

現在,這使得代碼冗餘時,有可變的輸入。如有排列的字段進行過濾。我試圖讓我的查詢是通用的,比如這個糟糕的例子。 因此,我可能希望能夠明確指出可以匹配任何值的字段。理論上下面的例子應該返回相同的文件。

例子:

取消顯式(正常)db.user.find({});

明確(怪異)db.user.find({name: {$ANY}});

或使其更加複雜。

db.user.find({name: {$ANY}, information: "doctor"}); 

這是行不通的,但我們的目的是讓所有的都是醫生,但對name領域任何形式的價值,不僅僅是對約翰的文件。也許更復雜的東西就是這樣。

db.user.find({name: function(){ 
    if(req.query.name)//check if empty 
    { return req.query.name; } 
    else { return $ANY; } 
}, information: "doctor"}); 

那麼這將是通用的,足以用於動態請求behavior.As單查詢實例據我所知,沒有這樣的事情來實現。

預先感謝您。

回答

1

如果你想找到information ='doctor'的所有文件,爲什麼不直接詢問沒有名字?

db.user.find({information: "doctor" }); 
+0

那就是它不再是明確的。 – karloluis

2

要得到所有的都是醫生,但有任何排序對name字段值的文件,你需要的$exists$ne運營商在查詢中,因爲$exists操作包含字段的文件相匹配,包括文件,其中字段值爲空,並且$ne操作者選擇其中name字段不爲空的文件:

db.user.find({"name": { "$exists": true, "$ne": null }, "information": "doctor"}); 
+0

現在嘗試將其從''(空字符串)概括爲任何匹配的字符串,因爲它通常會執行,全部在單個查詢中。 – karloluis