【问题标题】:How to efficiently aggregate several collections into one collection如何有效地将多个集合聚合到一个集合中
【发布时间】:2023-03-31 22:15:01
【问题描述】:

我有四个系列

1.links(movieId,imdbId,tmdbId) 
2.movies(movieId,title,genres),
3.tags(userId,movieId,tag,timestamp), 
4.ratings(userId,movieId,rating,timestamp).

现在我需要做的是将它们聚合到一个集合中,如下所示

movieId,imdbId,tmdbId,
title,genres,
u_data{[
{userId,tag,tag_timestamp,
rating,rating_timestamp}
]}

我怎样才能做到这一点。

我推荐了link1。却想不出答案。 (我用dataset from grouplens.org

【问题讨论】:

    标签: javascript node.js mongodb mongo-shell


    【解决方案1】:

    为简洁起见,我合并了您的前两个集合。此外,由于他们建议一对一的关系,因此如果 16 MB 限制不是您所关心的问题,建议将其保存在一个文档中.....


    db.t1.insert({
      movieId:1,
      title:"title-1",
      generes:["g1", "g2"],
      imdbId:111,
      tmdbId:112
    });
    
    db.t2.insert({
      movieId:1,
      userId:11,
      tag:"t1",
      timestamp: new Date()
    
    });
    
    db.t2.insert({
      movieId:1,
      userId:12,
      tag:"t2",
      timestamp: new Date()
    
    });
    
    db.t3.insert({
      movieId:1,
      userId:11,
      rating:2,
      timestamp: new Date()
    });
    db.t3.insert({
      movieId:1,
      userId:12,
      rating:3,
      timestamp: new Date()
    });
    
    
    db.t1.find().forEach(function(e){
      var mId = e.movieId;
      var arr = [];
      var finalOutput = {};
      finalOutput.movieId = mId;
      finalOutput.title = e.title;
      finalOutput.generes = e.generes;
      finalOutput.imdbId = e.imdbId;
      finalOutput.tmdbId = e.tmdbId;
    
      db.t2.find({"movieId":mId}).forEach(function(e2){
            var v = {};
            v.userId = e2.userId;
            v.tag = e2.tag;
            v.tag_ts = e2.timestamp;
            arr.push(v);
      });
    
    for(i in arr){
        db.t3.find({movieId:mId,  userId:arr[i].userId}).forEach(function(e3){
            arr[i].rating = e3.rating;
            arr[i].rating_ts =e3.timestamp;
        });
    
    }
      finalOutput.u_data = arr;
      printjson(finalOutput);
    });
    

    输出:https://www.dropbox.com/s/ijwg2xtbrwa8782/Screenshot%202015-06-22%2000.49.07.png?dl=0

    【讨论】:

      猜你喜欢
      • 2011-06-17
      • 1970-01-01
      • 2011-10-28
      • 2014-01-25
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 2021-08-05
      相关资源
      最近更新 更多