gpt4 book ai didi

javascript - Meteor 获取第一个集合的值,查找另一个集合的值

转载 作者:行者123 更新时间:2023-11-27 23:44:37 25 4
gpt4 key购买 nike

所以我得到了两个集合:

  1. 用户,包含用户 ID、名字、姓氏。
  2. 答案,包含answerId、questionId 和用户。

“Answers”集合中的“user”字段指的是回答问题的用户的 userId。

我能够从答案集合中返回 userId,但现在我想使用 userId 从 Users 集合中查找名字和姓氏。

另一个解决方案可能是不将 userId 插入到 Answers 集合中,而是插入名字和姓氏。但我也不知道如何实现这一点。

希望您能理解我的问题,也希望任何人都可以帮助我!

你的,升

最佳答案

您应该能够使用 forEach() 循环浏览 Answers 集合中的每个答案文档。 方法,通过在 Users 集合中搜索 id 来查找相关的用户文档,如下例所示:

Answers = new Meteor.Collection("answers");
Users = new Meteor.Collection("users");

if(Meteor.isClient) {
processed_data = [];

Deps.autorun(function (c) {
console.log('run');
var cursor = Answers.find({}, { sort: { time: 1 }});
if (!cursor.count()) return;

cursor.forEach(function (ans) {
var user = Users.findOne({ "_id": ans.user }, { "fields": {"firstname": 1, "surname": 1} });
ans.user = user;
processed_data.push(ans);
});

console.log(processed_data);
c.stop();
});
}

数据将是 react 性的,因为当您使用 Deps.autorun 时,function() {...} 中的整个 block 将在每次 react 性变量或文档更改时重新运行,以任何方式(即更新、删除或插入),或任何其他 react 性变量更改。

对于使用具有名字和姓氏的实际用户文档更新 Answers 集合中的 userId 的另一个解决方案,您可以通过以下方式实现使用Bulk API operations 进行更新。您可以通过 rawCollection() 获取对 npm MongoDB 驱动程序中集合和数据库对象的原始访问权限 rawDatabase() Mongo.Collection 上的 方法

Answers = new Meteor.Collection("answers");
Users = new Meteor.Collection("users");

if (Meteor.isClient) {
Template.answerlist.helpers({
answers: function () {
processed_data = [];

Deps.autorun(function (c) {
console.log('run');
var cursor = Answers.find({}, { sort: { time: 1 }});
if (!cursor.count()) return;

cursor.forEach(function (ans) {
var user = Users.findOne({ "_id": ans.user }, { "fields": {"firstname": 1, "surname": 1} });
ans.user = user;
processed_data.push(ans);
});

console.log(processed_data);
c.stop();
});

return processed_data;
}
});

Template.answerlist.events({
'click #updateAnswers': function(ev) {
Meteor.call('updateAnswersUser');
}
});

}


if (Meteor.isServer) {
Meteor.startup(function () {
Meteor.methods({
updateAnswersUser: function() {
var bulkOp = Answers.rawCollection().initializeUnorderedBulkOp(),
counter = 0;
Answers.find({}).forEach(function(ans) {
var user = Users.findOne({ "_id": ans.user }, { "fields": {"firstname": 1, "surname": 1} });
var changes = {};
changes["user"] = user;
bulkOp.find({"_id": ans._id}).updateOne({ "$set": changes });

counter++;
if (counter % 1000 == 0) {
// Execute per 1000 operations and re-initialize every 1000 update statements
bulkOp.execute(function(e, r) {
console.info('r.nMatched', r.nMatched, 'r.nModified', r.nModified);
});
bulkOp = Answers.rawCollection().initializeUnorderedBulkOp();
}
});

// Clean up queues
if (counter % 1000 != 0){
bulkOp.execute(function(e, r) {
console.info('r.nMatched', r.nMatched, 'r.nModified', r.nModified);
});
}
}
});
});
}

关于javascript - Meteor 获取第一个集合的值,查找另一个集合的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33342645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com