如何在Meteor.user()中找到一个元素,并使用meteor返回mongodb中同一数组中的其他元素

时间:2016-02-22 10:03:09

标签: mongodb meteor

如何在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"
  ]
}

2 个答案:

答案 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仅向客户端订阅_idprofile对象。所以你将无法获取你的班级记录。您需要创建一个自定义publish,它返回您想要的记录并订阅该出版物。