使用Meteor:
我在Messages中有一条消息列表,用于存储userId。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace myProject.Models
{
public class YourViewModel
{
public YourViewModel()
{
//This is the constructor of the class
//Call the function you need
var tVar = Helpers.CommonFunctions.GenerateSHA("String to process");
}
}
}
我发布消息和现有用户。
Messages = new Mongo.Collection('messages');
// example of message data:
{
authorId: 'XFdsafddfs1sfd', // corresponding to a Meteor.userId
content: 'some Message'
}
目前,我可以获取消息列表并根据userIds添加用户名。由于用户可以更改其用户名和用户名。个人资料信息,将用户数据添加到集合中只是userIds是没有意义的。
Meteor.publish('messages', function () {
return Messages.find({});
});
Meteor.publish('users', function () {
return Meteor.users.find({});
});
此代码有效,但涉及大量浪费的调用。我想知道如何以更好的方式实现这一目标。
在流星中,什么是效率最高的&将用户数据与包含userIds的集合配对的最简洁方法?
答案 0 :(得分:6)
这是一个常见的用例:将其他集合的id存储在数据库中,并在UI上使用人类可读的参数。
在Meteor中,collection.find()函数提供传递此用例的转换回调。
var cursor = messages.find(
{},
{
transform: transformMessage
}
);
转换函数现在可以直接修改你的对象,添加/修改/删除你所获取对象的属性(注意:出于安全原因不要在客户端修改/删除:改为在服务器端使用过滤器并允许/拒绝)。
function transformMessage(message) {
var user = Meteor.users.findOne(message.authorId);
if (user) {
var username = user.username;
message.username = username;
}
return message;
};
这种方式的好处是:您仍在使用游标并阻止fetch()。当然,代码更清晰。