2015-11-26 52 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只有一个子文档 –