首页 文章

在MongoDB中无法根据ID查找子文档

提问于
浏览
0

我在Node中使用MongoDb(作为MongoJS的一部分) . 我也使用子文档并将ID分配给子文档 .

当我根据主文档进行查询时,它会返回整个文档,但是当我尝试根据其ID找到子文档时,它不会返回任何结果 . 在mongoose中,我已经为结果字段声明了一个单独的模式,它有自己的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();
>

1 回答

  • 2

    您不能仅通过mongoDb中的ID搜索子文档 . 您必须始终从主文档开始,即...搜索具有“results”数组的文档,该数组包含您要查找的子文档:

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

    如果您希望输出文档仅包含您要查找的子文档(不包括数组的其他子文档),您可以使用projection {“results . $”: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
        }]
      }]
    }
    

相关问题