【问题标题】:Associating a userID to user uploaded data in Meteor在 Meteor 中将用户 ID 与用户上传的数据相关联
【发布时间】:2015-12-08 00:27:19
【问题描述】:

我几天前问过这个问题,但删除了它,我在这里添加更多说明以说明我正在查看的内容。

所以我有一个过程,用户上传 CSV,然后 CSV 由 PapaParse 解析,然后发送到服务器端并最终插入 MongoDb。

我的问题是这些上传都没有链接到特定用户,所以任何人都可以访问每个上传的内容,就像现在的样子。

我试图做的是循环上传数据,看起来像这样;

var document = [{object}, {object}, {object}, {object}, {object}... ];

我使用 for 循环遍历每个对象并添加一个 _id 字段,该字段包含通过 var currentUser = this.userId; 的用户 ID

Meteor.methods({
  insert: function(document){
    var currentUser = this.userId;
    var newDocument = document;

    for(var i = 0; i < newDocument.length; i++){
      newDocument[i]._id = currentUser;
    }

     Bank.insert(newDocument);
  }

问题是内存分配对于较大的上传来说是一个问题,并且流星在尝试遍历所有对象并将 _id 键单独添加到数组的每个单元格中的每个对象时只会崩溃。

当文档插入到 MongoDB 中时,它看起来像这样:

我知道在我之前的帖子中,有人提到 MongoDB 的 insert 方法不接受数组作为输入,但在我的例子中,它确实如此,因为上面的屏幕截图正是文档在插入 MongoDB 之前的样子。所以基本上,每个对象都是 MongoDB 中的一个新文档。我正在尝试找到一种方法将用户的用户 ID 与数据库中的每个文档绑定。

除了循环遍历整个数据集(某些用户可能有数万个)之外,还有其他方法可以将上传与唯一的当前用户相关联吗?

【问题讨论】:

    标签: mongodb meteor meteor-accounts


    【解决方案1】:

    为什么不干呢?

    Meteor.methods({
      insert: function(document){
        var currentUser = Meteor.userId();
        var newDocument = document;    
        Bank.insert({userId: currentUser, data: newDocument});
      }
    });
    

    现在您集合中的每个文档都有两个userIddata。后者将是您的数组。

    【讨论】:

    • 您好,感谢您的帮助。现在用户的 ID 与这样的集合相关联:i.gyazo.com/171e03faa16380bc3d2ce8709276f790.png 那么,如果我理解正确的话,数据库中的每个文档都将是一个具有 userId 键和数据键的对象?
    • 我还有一个问题:如果同一个用户上传更多的 CSV 文件,它们是否会位于同一个对象文档中,而无需在同一个用户 ID 下创建其他文档?同样,用户是否可以在同一对象下添加更多数据/上传其他 CSV 文件?
    • 对于您的第一个问题,是的,Bank 中的每个文档都将包含 {_id: String, userId: String, data: Array of objects}。对于您的第二个问题:可以将更多 csv 文件添加到原始文档中,但我不建议这样做。请记住,每个 Mongo 文档的大小限制为 16MB。
    猜你喜欢
    • 2013-09-09
    • 2011-11-11
    • 2021-06-15
    • 2015-06-15
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    相关资源
    最近更新 更多