2015-12-07 2 views
0

Я задал этот вопрос пару дней назад, но удалил его, и я добавляю больше разъяснений здесь, в том, что я ищу.Связать идентификатор пользователя с пользователем Загруженные данные в Meteor

Так что у меня есть процесс, когда пользователь загружает CSV и CSV, затем разбирается с помощью PapaParse, а затем отправляется на серверную сторону и в конечном итоге вставляется в MongoDb.

Моя проблема заключается в том, что ни одна из этих загрузок не связана с конкретным пользователем, поэтому каждый будет иметь доступ к каждой загрузке, как сейчас выглядят вещи.

То, что я пытался сделать, - это просмотреть данные загрузки, которые выглядят так:

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

Я использовал для цикла цикла по каждому из объектов, и добавить _id поля этого содержит идентификатор пользователя с помощью var currentUser = this.userId;

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, это выглядит следующим образом:

enter image description here

Я знаю, что в моем предыдущем посте, кто-то упомянул, что метод вставки MongoDB в не принимает массив в качестве входных данных, но как-то в моем случае это происходит, потому что вышеприведенный скриншот - это именно то, как выглядит документ перед вставкой в ​​MongoDB. Таким образом, каждый объект является новым документом внутри MongoDB. Я пытаюсь найти способ привязать идентификатор пользователя пользователя к каждому документу в базе данных.

Есть ли другой способ связать загрузку с уникальным текущим пользователем, кроме того, что он перебирает весь набор данных, который может быть в десятках тысяч для некоторых пользователей?

ответ

2

Почему бы просто не сделать?

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

Теперь каждый документ в вашей коллекции будет иметь два ключей: userId и data. Последний будет вашим массивом.

+0

Эй, спасибо за вашу помощь. Теперь идентификатор пользователя связан с такой коллекцией: https://i.gyazo.com/171e03faa16380bc3d2ce8709276f790.png Итак, если я правильно понимаю, каждый документ в базе данных будет объектом с ключом userId и ключ данных? –

+0

Еще один вопрос, который у меня есть: если один и тот же пользователь загружает больше CSV-файлов, они будут находиться в одном документе объекта без создания дополнительных документов под тем же идентификатором пользователя? Аналогично, возможно ли пользователю добавлять дополнительные данные/выгружать дополнительные файлы CSV под одним и тем же объектом? –

+1

К вашему первому вопросу, да, каждый документ в 'Банке' будет содержать' {_id: String, userId: String, data: Array of objects} '. К вашему второму вопросу: можно было бы добавить больше csv-файлов в исходный документ, но я бы не рекомендовал этого. Помните, что монгольские документы ограничены 16 МБ каждый. –

Смежные вопросы