如何在Meteor.user()中找到一个元素,并使用meteor返回mongodb中同一数组中的其他元素。我如何找到course_id并获取classes_id数组?
这是在meteor.user
{
"_id": "RoFFcaAfXBeR2napZ",
"emails": [
{
"address": "tong@gmail.com",
"verified": false
}
],
"classes": [
{
"course_id": "svesvinfdsgrvnekuktndvsk",
"classes_id": ["myclass1", "myclass2"]
},
{
"course_id": "cegtrtcrtvw5cgekrgecec",
"classes_id": ["myclass3", "myclass4"]
},
{
"course_id": "rvxwefdsrvyjvyccrhnkik",
"classes_id": ["myclass5", "myclass6"]
},
],
"courses": [
"qwmZdgQbrZ3rmHdN8"
]
}
答案 0 :(得分:1)
您可以使用Mongo的$
投影操作符在服务器上执行此操作,但是您无法使用开箱即用的MiniMongo获得相同的功能,因为它不支持此操作符。
让courseId
保持所需的课程ID。
在服务器上,使用:
c.find({"classes.course_id": courseId},{fields:{"courses.$": 1}})
应该产生预期的结果。
您必须重构您的收藏或使用其他技巧才能在客户端获得相同的结果。
我想到的一个技巧是使用映射只留下所需的课程:
function getClasses(courseId){
return myCollection.find({"classes.course_id": courseId}).map((student) => {
student.classes = _.filter(student.classes, (el) => el.course_id === courseId)
return student;
});
}
也会使您的查询无效。
答案 1 :(得分:0)
默认情况下Meteor
仅向客户端订阅_id
和profile
对象。所以你将无法获取你的班级记录。您需要创建一个自定义publish
,它返回您想要的记录并订阅该出版物。