如何在Mongoose mapreduce中调用相关模型

时间:2013-05-30 03:32:56

标签: javascript node.js mongodb mapreduce mongoose

因此,mapreduce可能不是解决这个问题的最佳方法,但这就是我想要实现的目标。

我有一个事件架构和一个场地架构。每个活动都有多个日期和0/1场地。我希望,在事件保存时,为每个可能的日期生成条目,并将其与场地信息一起存储在另一个集合中 - 比如发生事件。但我有2个问题/问题。

  1. 即使使用示波器,我似乎也无法通过地图功能调用外部内容,因此我的查找场地信息失败了。

  2. 每个日期生成条目的最佳位置在哪里?在地图中循环显示日期并为每个日期发出?或者在减少或最终确定功能?

  3. 我不想告诉我无法从mapreduce函数调用dbref,而是希望找到最有效的解决方案,在事件保存时创建包含所需事件/场地数据的事件集合。我对其他方法持开放态度,但下面的代码应该概述我的需求。

        Event.pre('save', function (next) {
    
        var o = {};
        o.scope = {Venue: mongoose.model.Venue};
        o.map = function () {
    
          var data = {dates: this.dates};
          var self = this;
          if(this.venue) {
            Venue.view(this.venue, {}, function(err, doc) {
              if(doc) {
                data.venue_name = doc.name;
              }
              emit(self._id, data);
            });
          } else {
            emit(this._id, data);
          }
        };
        o.reduce = function (k, vals) {
          return vals;
        };
        o.out = { replace: 'occurrences' };
        o.verbose = true;
        mongoose.models.Event.mapReduce(o, function (err, model, stats) {
          next();
        });
        });
    

1 个答案:

答案 0 :(得分:0)

map / reduce一次对一个集合进行操作。我的建议是:

  1. 映射/减少事件并为每个日期发出一次,包括事件ID和场地ID(希望您在事件集合中有场地ID)
  2. 查询具有场地ID的所有记录的结果集合(“出现次数”),查询该文档的场地,然后使用非规范化的场地信息更新“出现”文档。