gpt4 book ai didi

mongodb - 在 mongoDb 中查询和分组?

转载 作者:可可西里 更新时间:2023-11-01 09:28:25 26 4
gpt4 key购买 nike

第 1 部分:

我有(学生)收藏:

 {
sname : "",
studentId: "123"
age: "",
gpa: "",
}

我只想从中获取两个 key :

{
sname : "",
studentId: "123"
}

所以我需要消除 age 和 gpa 以便只有 name 和 studentId,我该怎么做?

第二部分:

然后我有“主题”集合:

{
subjectName : "Math"
studentId : "123"
teacherName: ""
}

我需要将前面的键(在第 1 部分中)与正确的 studentId 匹配/组合,所以我最终会得到这样的结果:

 {
sname : "",
studentId: "123",
subjectName : "Math"

}

我该怎么做,这是获得结果的正确思考方式吗?我尝试阅读有关 group 和 mapReduce 的内容,但没有找到明确的示例。

最佳答案

要回答您的第一个问题,您可以这样做:

db.student.find({}, {"sname":1, "studentId":1});

其中的第一个 {} 是限制查询,在本例中它包括整个集合。后半部分根据您是否想要它们来指定具有 1 或 0 的键。不要在单个查询中混用 include 和 excludes。除了几个特殊情况,mongo 不会接受它。

你的第二个问题比较难。您要求的是加入,而 mongo 不支持。无法在 studentId 上连接两个集合。您需要找到所有想要的学生,然后使用这些学生 ID 找到所有匹配的科目。然后您需要将这两个结果合并到您自己的代码中。您可以通过正在使用的任何驱动程序执行此操作,也可以在 shell 本身的 javascript 中执行此操作,但无论哪种方式,您都必须将它们与您自己的代码合并。

编辑:下面是一个示例,说明如何在 shell 中执行此操作,并将输出转到名为“out”的集合。

db.student.find({}, {"sname":1, "studentId":1}).forEach(
function (st) {
db.subject.find({"studentId":st.studentId}, {"subjectName":1}).forEach(
function (sub) {
db.out.insert({"sname":st.sname, "studentId":st.studentId, "subjectName":sub.subjectName});
}
);
}
);

如果这不是经常更改的数据,您可以删除“out”集合并使用此 shell 脚本定期重新填充它。然后你的代码可以直接从“out”查询。如果数据确实经常更改,您将希望在代码中即时进行合并。

另一个可能更好的选择是将“主题”数据包含在“学生”集合中,反之亦然。这将导致对 mongodb 更友好的结构。如果您经常遇到此连接问题,mongo 可能不是解决之道,关系数据库可能更适合您的需求。

关于mongodb - 在 mongoDb 中查询和分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6712944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com