Node.js 聚合链接文档的组数据

Node.js 聚合链接文档的组数据,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,目前,我们使用以下代码按创建日期对集合中的所有文档进行分组: this.aggregate( [ { $match: { language: options.criteria.language, status: 1, type:{ $ne: "challenge" } }}, { $group: { _id: { y: { '$year': '$created' }, m: { '$month

目前,我们使用以下代码按创建日期对集合中的所有文档进行分组:

this.aggregate( [
        { $match: { language: options.criteria.language, status: 1, type:{ $ne: "challenge" } }},
      { $group: {
          _id: {
              y: { '$year': '$created' },
              m: { '$month': '$created' },
              d: { '$dayOfMonth': '$created' },
              h: { '$hour': '$created' },
              min: { '$minute': '$created' },
              s: { '$second': '$created' }
          },
          count: { $sum : 1 }
        }},
        {$project: {
            date: "$_id", // so this is the shorter way
            count: 1,
            _id: 0
        }},
        { $sort: { "date": 1 } }

    ], function(err, result){

        if(err) {
          return callback(err);
        }


        callback(null, result);
    });
但是,我们现在希望根据开始日期而不是创建日期对结果进行分组。开始日期不是当前集合的字段,而是链接到此集合中的
currentRevision
对象的字段

我试过这个:

this.aggregate( [
        { $match: { language: options.criteria.language, status: 1, type:{ $ne: "challenge" } }},
      { $group: {
          _id: {
              y: { '$year': '$currentRevision.start_date' },
              m: { '$month': '$currentRevision.start_date' },
              d: { '$dayOfMonth': '$currentRevision.start_date' },
              h: { '$hour': '$currentRevision.start_date' },
              min: { '$minute': '$currentRevision.start_date' },
              s: { '$second': '$currentRevision.start_date' }
          },
          count: { $sum : 1 }
        }},
        {$project: {
            date: "$_id", // so this is the shorter way
            count: 1,
            _id: 0
        }},
        { $sort: { "date": 1 } }

    ], function(err, result){

        if(err) {
          return callback(err);
        }


        callback(null, result);
    });
但这只是给了我一个错误:“无法查询数据库”


你知道如何解决这个问题吗?

你说的“链接文档”是什么意思。mongoose模型中是否引用了另一个集合中的实际数据?你不能那样做。MongoDB一次只能对一个集合进行操作。Mongoose
.populate()
不是连接,只是连接的幻觉。所有数据都需要在同一个集合中才能聚合。或者您正在客户端中进行处理。是的,它确实在引用的另一个集合中。很遗憾,这是不可能的:(这实际上是使用MongoDB的一个基本概念。没有连接。如果您打算将数据与其他数据一起用作查询或收集点,那么您的设计需要将其放在同一个集合中,而不是引用它。您不能只做与使用关系数据库相同的事情。重点是基于ho设计和存储shemaw您打算使用它,而不仅仅是您习惯使用的。可能通过两个查询就可以做到这一点吗?不。您基本上仍然在要求“连接”,因为“startDate”是另一个集合中文档的属性。您的结构表明这是
1:1
,因此具有“链接”数据没有任何意义。它只是一个关系概念,在MongoDB设计中没有你所依赖的位置。你可能在很多地方引用同一个对象,所以关系思维说“使用另一个表”。但MongoDB不是这样工作的。请将所需的数据存储在文档中,并挂起重复。收益可能大于成本。