node.js - 如何使用node js从mongo获取记录中的特定信息?

标签 node.js mongodb mongodb-query

{
  "Name": "lokesh",
  "Courses": [
    {
      "Name": "EC",
      "Faculity": "Priyadharshini",
      "ExamDate": "Thu Aug 27 2015 00:00:00 GMT+0530 (India Standard Time)",
      "Marks": [
        {
          "testCode": "EC-01",
          "testMarks": "98"
        },
        {
          "testCode": "EC-02",
          "testMarks": "94"
        }
      ]
    },
    {
      "Name": "CS",
      "Faculity": "Rama",
      "ExamDate": "Thu Aug 27 2015 00:00:00 GMT+0530 (India Standard Time)",
      "Marks": [
        {
          "testCode": "CS-01",
          "testMarks": "96"
        },
        {
          "testCode": "CS-02",
          "testMarks": "96"
        }
      ]
    }
  ],
  "StudentCode": "Software"
}

在上述对象中,如何访问以仅获取类(class)对象内的“CS”“EC”对象没有任何不需要的信息

我在mongo shell中尝试了这个命令

db.studentMarksPortal.find({"Name":'lokesh'},{"Courses":{$elemMatch:{"Name": 'EC'}}})

输出是这样的

{ "_id" : ObjectId("5aaa0005572a4c172030c852"), "Courses" : [ { "Name" : "EC", "Faculity" : "Priyadharshini", "ExamDate" : "Thu Aug 27 2015 00:00:00 GMT+0530 (India Standard Time)", "Marks" : [ { "testCode" : "EC-01", "testMarks" : "98" }, { "testCode" : "EC-02", "testMarks" : "96" }, { "testCode" : "Final", "testMarks" : "99" } ] } ] }

但是当我在 Node Js 中尝试如下时

db.collection(collectionName).find({"Name":studentName},{"Courses":{$elemMatch:{"Name": studentCourse}}}).toArray( 
                function(findErr, result){
                    if (findErr) reject(findErr);
                    client.close();
                    console.log(result);
                    resolve(result);
                }
            );
     });

为什么它返回 lokesh 的完整记录?有人可以帮助我如何才能只获得选定的类(class)吗?

最佳答案

您可以在查询中使用查找过滤器。

db.collection(collectionName).find({'类(class)'}, { "_id": 0, "姓名": 1 });

此特定示例使用 native mongo 库,但相同的借口也适用于其他示例。我相信 Mongoose 是选择

第二个对象是过滤器,例如,在本例中我不希望 _idName 一起返回,并且 Name 设置为 true。

我还没有测试过这个,但它应该是你正在寻找的: https://docs.mongodb.com/manual/tutorial/project-fields-from-query-results/#suppress-id-field

Mongo 推荐的方法是 $projection https://docs.mongodb.com/manual/reference/operator/aggregation/project/

查询中要返回的字段。要包含或排除(不是两者)的字段对象,{'a':1}

您的查询将是:

db.collection(collectionName).find({"姓名":studentName},{"类(class).Name":studentCourse}).project({ 姓名: 1, 分数: 1});

将查找名称为ECE的类(class),并返回Name以及您要查找的Marks..

关于node.js - 如何使用node js从mongo获取记录中的特定信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49515662/

相关文章:

node.js - createInterface 在终端中打印两次

MongoDB:输出 'id' 而不是 '_id'

node.js - 使用 mongodb 更新复杂对象

javascript - "done() called multiple times" Mocha 月鹅

node.js - 从回调中捕获异常

mongodb - 如何将 $arrayToObject 应用于 mongodb 聚合中 $push 输出的数组

MongoDB GROUP BY 和 COUNT 未知键

python - 如何在 eve Rest 框架中创建不区分大小写的正则表达式

mongodb - 如何在 mongodb 的集合中添加一个新的数组字段?

javascript - 从路由器调用对象(类)方法的正确方法?