2015-11-26 98 views
0

我在Node中使用MongoDb(作爲MongoJS的一部分)。我使用子文檔並將ID分配給子文檔。在MongoDB中無法找到基於ID的子文檔

當我根據主文檔進行查詢時,會返回整個文檔,但是當我嘗試根據其ID查找子文檔時,它不會返回任何結果。在貓鼬中,我爲具有自己ID的結果字段聲明瞭一個單獨的模式。

要注意的是,我在數組中使用數組來獲取結果字段。

以下是此場景的控制檯輸出。

>db.tests.find({"_id":ObjectId("56563e92c8be03ec1a341374")}).pretty(); 

    "_id" : ObjectId("56563e92c8be03ec1a341374"), 
    "test" : 2, 
    "startAt" : ISODate("2015-11-25T23:04:50Z"), 
    "endedAt" : ISODate("2015-11-25T23:04:50Z"), 
    "results" : [ 
      { 
        "_id" : ObjectId("56563e92c8be03ec1a341375"), 
        "second" : [ 
          { 
            "sec" : 50, 
            "avg" : 40.6, 
            "grt" : 1.2 
          } 
        ] 
      } 
    ], 

>db.tests.find({"_id":ObjectId("56563e92c8be03ec1a341375")}).pretty(); 
> 
+0

也許你想檢查這個 https://docs.mongodb.org/manual/reference/operator/projection/elemMatch/ –

回答

2

您不能僅通過它們在mongoDb中的ID搜索子文檔。你必須始終從主文檔ie..search的文檔具有包含你正在尋找的子文檔的「成果」數組start:

db.test.find({ "results._id" : ObjectId("56563e92c8be03ec1a341375") }); 

,如果你想在輸出文件只包含你要找的人(不包括其他子文檔它的陣列)可以使用投影子文檔{「的結果$」:1}:

db.test.find({ "results._id" : ObjectId("56563e92c8be03ec1a341375") },{"results.$" : 1}); 

它會給你這樣的輸出:

{ 
    "_id": ObjectId("56563e92c8be03ec1a341374"), 
    "results": [{ 
    "_id": ObjectId("56563e92c8be03ec1a341375"), 
    "second": [{ 
     "sec": 50, 
     "avg": 40.6, 
     "grt": 1.2 
    }] 
    }] 
} 
+0

是的,你是對的,一個給定的_id只有一個子文檔 –