{
"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 是选择
。
第二个对象是过滤器,例如,在本例中我不希望 _id
与 Name
一起返回,并且 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/