2017-09-25 193 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) )。第一(); –