У меня есть две коллекции: данные и пользователи. В коллекции данных имеется массив идентификаторов пользователей, состоящий из примерно 300 - 800 пользователей.Метеор: ускорение MongoDB Присоединиться к большим данным?
Мне нужно объединить страны всех пользователей для каждой строки в коллекции данных, которая зависает моего веб-браузера из-за слишком большого количества данных, которые запрашиваются сразу.
Я запрашиваю около 16 строк коллекции данных одновременно, а также есть 18833 пользователей в коллекции Пользователи.
До сих пор я пытался сделать как метод Метеор, так и преобразование() ПРИСОЕДИНЯЮТСЯ к коллекции Meteor, которая является тем, что висит в моем приложении.
Монго Коллекция:
UserInfo = new Mongo.Collection("userInfo")
GlyphInfo = new Mongo.Collection("GlyphAllinOne", {
transform: function(doc) {
doc.peopleInfo = doc.peopleInfo.forEach(function(person) {
person.code3 = UserInfo.findOne({userId: person.name}).code3;
return person;
})
return doc;
}
});
'code3' обозначает страну пользователя.
Издание:
Meteor.publish("glyphInfo", function (courseId) {
this.unblock();
var query = {};
if (courseId) query.courseId = courseId;
return [GlyphInfo.find(query), UserInfo.find({})];
})
Испытано Метод Сервер:
Meteor.methods({
'glyph.countryDistribution': function(courseId) {
var query = {};
if (courseId) query.courseId = courseId;
var glyphs = _.map(_.pluck(GlyphInfo.find(query).fetch(), 'peopleInfo'), function(glyph) {
_.map(glyph, function(user) {
var data = Users.findOne({userId: user.name});
if (data) {
user.country = data ? data.code3 : null;
console.log(user.country)
return user;
}
});
return glyph;
});
return glyphs;
}
});
Сбор данных:
Существует опция PREPRO так что страны уже будут включены, однако мне не разрешено изменять эти коллекции. Я предполагаю, что если этот JOIN будет выполнен при запуске сервера и после этого выставлен через массив, поскольку метод Meteor может слишком долго останавливать время запуска сервера; хотя я не уверен.
Есть ли у кого-нибудь идеи о том, как ускорить этот запрос?
РЕДАКТИРОВАТЬ: Пробовал команды агрегации MongoDB, а также, как представляется, очень медленно на minimongo Meteor. Прошло 4 минуты, чтобы запросить по сравнению с 1 секундой на родном клиенте MongoDB.
var codes = GlyphInfo.aggregate([
{$unwind: "$peopleInfo"},
{$lookup: {
from: "users",
localField: "peopleInfo.name",
foreignField: "userId",
as: "details"
}
},
{$unwind: "$details"},
{$project: {"peopleInfo.Count": 1, "details.code3": 1}}
])
сбрасывать документы в тексте ..... – profesor79
Мне не разрешено работать с документами в тексте проекта, над которым я работаю. – Dranithix
Агрегация не работает против minimongo, она работает только на стороне сервера. –