2014-05-07 37 views
1

這是我的MongoDB表設計mongodb過濾器在多級別的子文件?

"_id" : ObjectId("5368e65ae6aa265432000002"), 
"accounts" : {}, 
"contacts" : { 
    "1" : { 
     "accounts" : { 
      "user1" : "data", 
      "user3" : "data" 
     } 
    }, 
    "2" : { 
     "accounts" : { 
      "user2" : "data", 
      "user5" : "data", 
     } 
    }, 
    "3" : { 
     "accounts" : { 
      "user4" : "data" 
      "user7" : "data", 
     } 
    } 
}, 

我的問題是如何檢查用戶已經有任何帳戶的對象,或者不相關的。

例如我有像user1,user2的數據。我想檢查密鑰是否已經添加或不...

+1

不要把你的動態數據(如ID)的關鍵名稱。正如你所看到的,它給你無盡的麻煩。 – JohnnyHK

回答

0

如何檢查字段是否存在或不在MongoDB中,您可以看到here

你的情況:

db.yourcollectionname.find({"contacts.1.accounts.user1": { $exists : true }}) 

但遺憾的是我不能回答,如何檢查所有的ID(1,2,3)在一個查詢

+0

可能是db.yourcollectionname.find($或:[{「contacts.1.accounts.user1」:{$ exists:true}},{「contacts.2.accounts.user1」:{$ exists:true}}, {「contacts.3.accounts.user1」:{$ exists:true}}])。但它看起來非常醜陋。看來db結構的設計不適合數據使用模式。考慮重組可能是有意義的。 –

+0

是的需要一些更好的答案... – balaphp

+3

@balaphp更好的答案是你需要改變你的數據結構。像你這樣的子文件需要絕對路徑,正如你所示。你需要你的聯繫人實際上是一個數組,而「用戶」鍵需要是值。這樣你可以簡單地比較。 –