如何在猫鼬中加入两个收藏

部长

我有两个定义如下的模式:

var WorksnapsTimeEntry = BaseSchema.extend({
 student: {
     type: Schema.ObjectId,
     ref: 'Student'
 },
 timeEntries: {
     type: Object
 }
 });

var StudentSchema = BaseSchema.extend({
firstName: {
    type: String,
    trim: true,
    default: ''
    // validate: [validateLocalStrategyProperty, 'Please fill in your first name']
},
lastName: {
    type: String,
    trim: true,
    default: ''
    // validate: [validateLocalStrategyProperty, 'Please fill in your last name']
},
displayName: {
    type: String,
    trim: true
},
municipality: {
    type: String
    }
});

我想遍历每个学生,并显示时间条目。到目前为止,我有这段代码显然不正确,因为我仍然不知道如何加入WorksnapTimeEntry模式表。

Student.find({ status: 'student' })
        .populate('student')
        .exec(function (err, students) {
            if (err) {
                return res.status(400).send({
                    message: errorHandler.getErrorMessage(err)
                });
            }
            _.forEach(students, function (student) {
               // show student with his time entries....
            });
            res.json(students);
        });

谁知道我怎么做到这一点?

布雷克七世

您不需要.populate()在这里,而是想要两个查询,第一个查询与Student对象匹配以获取_id值,第二个查询将用于$in匹配WorksnapsTimeEntry那些“学生”的各个项目。

async.waterfall使用它来避免一些压痕蠕变:

async.waterfall(
    [
        function(callback) {
          Student.find({ "status": "student" },{ "_id": 1 },callback);
        },
        function(students,callback) {
            WorksnapsTimeEntry.find({
                "student": { "$in": students.map(function(el) {
                    return el._id
                })
            },callback);
        }
    ],
    function(err,results) {
       if (err) {
          // do something
       } else {
          // results are the matching entries
       }
    }
)

如果确实需要,则可以.populate("student")在第二个查询上从另一个表中获取填充项。

相反的情况是查询WorksnapsTimeEntry并返回“一切”,然后使用“匹配”查询选项过滤掉所有null结果.populate()

WorksnapsTimeEntry.find().populate({
    "path": "student",
    "match": { "status": "student" }
}).exec(function(err,entries) {
   // Now client side filter un-matched results
   entries = entries.filter(function(entry) {
       return entry.student != null;
   });
   // Anything not populated by the query condition is now removed
});

因此这不是理想的操作,因为“数据库”没有过滤可能的大部分结果。

除非有充分的理由不这样做,否则您可能应该“应该”“嵌入”数据。这样,"status“”之类的属性已在集合中可用,并且不需要其他查询。

如果您正在使用像MongoDB这样的NoSQL解决方案,那么您应该拥抱它的概念,而不是遵循关系设计原则。如果您一直在进行关系建模,那么您最好使用关系数据库,因为使用其他方式处理该解决方案将不会带来任何好处。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在PHP中加入两个多维数组

来自分类Dev

如何在sqlalchemy中加入两个KeyedTuple对象?

来自分类Dev

如何在MongoDB中加入两个聚合结果?

来自分类Dev

如何在Scala中加入两个列表?

来自分类Dev

如何在nestjs中加入两个模式?

来自分类Dev

如何在PHP中加入两个多维数组

来自分类Dev

如何在bash脚本中加入两个条件?

来自分类Dev

如何在C#中加入两个列表?

来自分类Dev

如何在linux中加入两个文件?

来自分类Dev

如何在php中加入两个mysql表

来自分类Dev

如何在mysql中加入两个表记录

来自分类Dev

猫鼬加入两个集合,并且仅从加入的集合中获取特定字段

来自分类Dev

如何在VBA中加入收藏

来自分类Dev

如何在mysql中加入两个表,但两者之间的日期不同?

来自分类Dev

如何在猫鼬中搜索带有两个元素的对象数组

来自分类Dev

如何使用两个独特的猫鼬处理验证

来自分类Dev

如何在Excel VBA中加入从两个不同数据源创建的两个记录集

来自分类Dev

如何在Android中加入(字面上)两个/多个ContentProvider?

来自分类Dev

如何在Scala和Apache Spark中加入两个DataFrame?

来自分类Dev

如何在PostgreSQL中加入更多然后两个表?

来自分类Dev

如何在h2o流中加入两个框架?

来自分类Dev

如何在MySQL中从同一表中加入两个选择

来自分类Dev

我如何在mysql中加入两个不同的表

来自分类Dev

如何在mysql数据库中加入两个表并获取记录。?

来自分类Dev

如何在列表中加入两个向量的元素并根据原点向量保留名称?

来自分类Dev

如何在pandas中加入两个DF并选择我想返回的列?

来自分类常见问题

猫鼬加入两个集合并在两个属性中获取引用数据

来自分类Dev

猫鼬加入两个集合并在两个属性中获取引用数据

来自分类Dev

在LINQ中加入两个列表

Related 相关文章

  1. 1

    如何在PHP中加入两个多维数组

  2. 2

    如何在sqlalchemy中加入两个KeyedTuple对象?

  3. 3

    如何在MongoDB中加入两个聚合结果?

  4. 4

    如何在Scala中加入两个列表?

  5. 5

    如何在nestjs中加入两个模式?

  6. 6

    如何在PHP中加入两个多维数组

  7. 7

    如何在bash脚本中加入两个条件?

  8. 8

    如何在C#中加入两个列表?

  9. 9

    如何在linux中加入两个文件?

  10. 10

    如何在php中加入两个mysql表

  11. 11

    如何在mysql中加入两个表记录

  12. 12

    猫鼬加入两个集合,并且仅从加入的集合中获取特定字段

  13. 13

    如何在VBA中加入收藏

  14. 14

    如何在mysql中加入两个表,但两者之间的日期不同?

  15. 15

    如何在猫鼬中搜索带有两个元素的对象数组

  16. 16

    如何使用两个独特的猫鼬处理验证

  17. 17

    如何在Excel VBA中加入从两个不同数据源创建的两个记录集

  18. 18

    如何在Android中加入(字面上)两个/多个ContentProvider?

  19. 19

    如何在Scala和Apache Spark中加入两个DataFrame?

  20. 20

    如何在PostgreSQL中加入更多然后两个表?

  21. 21

    如何在h2o流中加入两个框架?

  22. 22

    如何在MySQL中从同一表中加入两个选择

  23. 23

    我如何在mysql中加入两个不同的表

  24. 24

    如何在mysql数据库中加入两个表并获取记录。?

  25. 25

    如何在列表中加入两个向量的元素并根据原点向量保留名称?

  26. 26

    如何在pandas中加入两个DF并选择我想返回的列?

  27. 27

    猫鼬加入两个集合并在两个属性中获取引用数据

  28. 28

    猫鼬加入两个集合并在两个属性中获取引用数据

  29. 29

    在LINQ中加入两个列表

热门标签

归档