2013-07-19 58 views
2

如果您只知道密鑰名稱(比如「暱稱」),但不知道對象中該密鑰的確切路徑。通過密鑰查詢多級別MongoDB對象

例如綽號可能是在第一級,如:

{"nickname":"Howie"} 

或第二級:

{"user":{"nickname":"Howie"}} 

是否可以查詢暱稱等於「Howie」,將返回這兩個文件?

+0

希望得到回答,我只能看到'.find({暱稱:「Howie」})'只返回頂層。 – tymeJV

+0

只有當你知道所有可能的路徑並將它們與'$或'結合時。 – JohnnyHK

回答

3

不幸的是,沒有通配符允許您在db中的任何級別搜索字段。如果位置不相關,並且您可以修改文檔結構,那麼您在這裏有兩個選擇。您可以將您的文件作爲

{ fieldname:"nickname", value : "Howie" } 
{ fieldname:"user/nickname", value: "Howie" } 

然後,您可以查詢使用

db.so.find({fieldname:/nickname/, value:"Howie"}) 

另外,您可以存儲爲

db.so.insert({value:"Howie", fieldpath:["nickname"]}) 
db.so.insert({value:"Howie", fieldpath:["user", "nickname"]}) 

與第二種方法的優點是,您現在可以指數{ fieldpath:1,value:1}以及其上的查詢,如

db.so.find({fieldpath:"nickname", value:"Howie"}) 

將是一個索引查詢。

+0

謝謝Sridhar,這真的很有幫助!通過這種方式,您可以通過使用字段路徑或命名字符串鍵來將任何多級對象轉換爲一個級別的對象。我只是想知道它是一種好的/有效的解決方案,還是隻在特別需要時才使用的臨時解決方案,因爲它與正常的建議模式非常不同。 – spacemilkman