2017-09-25 148 views
0

好的,我有一個簡單的問題。我在MongoDB中有一個簡單的文檔,其中包含一個名爲「罰分」的子文檔。 現在我想通過子文檔(「罰分」)中的字符串找到文檔(這裏帶有_id「Cammeritz」),例如, 「penaltyid = 0f77d885-6597-3f47-afb1-0cee2ea3ece1」。你能幫我嗎?最好的解釋是Java,但如果你只是提供一個正常的MongoDB查詢幫助,那也是可以的。查詢在MongoDB中查找子文檔

{ 
    "_id" : "Cammeritz", 
    "penalties" : [ 
     { 
      "_id" : null, 
      "date" : ISODate("2017-09-25T20:01:23.582Z"), 
      "penaltyid" : "0f77d885-6597-3f47-afb1-0cee2ea3ece1", 
      "reason" : "Hacking", 
      "teammember" : "Luis", 
      "type" : "ban" 
     }, 
     { 
      "_id" : null, 
      "date" : ISODate("2017-09-25T20:01:23.594Z"), 
      "penaltyid" : "7f5411b0-e66a-33b3-ac4f-4f3159aa88a9", 
      "reason" : "Spam", 
      "teammember" : "BluingFX", 
      "type" : "kick" 
     } 
    ], 
    "isBanned" : true, 
    "isMuted" : false 
} 
+0

可能重複[MongoDB:在數組匹配參數中查找子文檔](https://stackoverflow.com/questions/11823296/mongodb-find-subdocument-in-array-matching-parameters) –

回答

2

哎呀,我誤解了您的問題。你需要使用點符號。 db.collection.find({ penalties.penaltyid: '0f77d885-6597-3f47-afb1-0cee2ea3ece1' })欲瞭解更多信息,請參閱Query on a Nested Field


原來的答覆:

db.collection.find({ penalties: "0f77d885-6597-3f47-afb1-0cee2ea3ece1" })應該工作。有關更多信息,請參見mongodb文檔中的Query an Array for an Element。我對Java並不是很熟悉,所以我在那裏幫不了什麼忙。

+0

基本上我的MongoDB GUI(Robo )給我一個錯誤:「錯誤:行1:意外的標記。」 –

+0

編輯:我認爲這是我的客戶端的一個問題,在Java中它完美地工作,所以對於需要答案的每個人來說,這裏是:Document d = getCollection()。find(eq(「penaltys.penaltyid」,s) )。第一(); –