2

collection2 と autoform を使用して、新しいコレクションに一部のユーザー データを挿入したいと考えています。ユーザー コレクションに多くのデータがあります。

最善の方法としてそれを行う方法がわかりませんか?

おそらく、Users コレクションを公開してサブスクライブし、スキーマでこのデータを取得する必要があります。

これは私のスキーマです

Posts = new Mongo.Collection('posts');

PostsIndex = new EasySearch.Index({
	collection: Posts,
	fields: ['title','tags.tags'],
	engine: new EasySearch.Minimongo()
	// name: 'PostsIndex',
	// permission: function(options) {
	//     return userHasAccess(options.userId); // always return true or false here
	// }
});

Posts.allow({
	insert: function(userId, doc) {
		return !!userId;
	}
});

Schema = {};

Schema.Tags = new SimpleSchema({
	tags: {
		type: String
	}
});

Schema.PostsSchema = new SimpleSchema({
	title: {
		type: String,
		label: '',
		max: 250,
		min: 3
	},
	tags: {
		type: [Schema.Tags]
	},
	authorId: {
		type: String,
		label: 'Author',
		autoValue: function(){
			return this.userId
		},
		autoform: {
			type: 'hidden'
		}
	},
	authorName: {
		type: String,
		label: 'AuthorName',
		autoValue: function(){
			return this.userId.username
		},
		autoform: {
			type: 'hidden'
		}
	},
	createdAt: {
		type: Date,
		label: 'CreatedAt',
		autoValue: function(){
			return new Date()
		},
		autoform: {
			type: 'hidden'
		}
	}
});

Posts.attachSchema(Schema.PostsSchema);

前もって感謝します :)

4

2 に答える 2

1

this.userIdオブジェクトではなく、現在のユーザーの ID のみを返します。this.userId.username動作できません。Meteor.usersthis.userIdコレクションでユーザーを検索し、username プロパティを返すために使用します。

var tempUser = Meteor.users.findOne({_id: this.userId});
return tempUser.username;

Meteor のドキュメントから:

デフォルトでは、現在のユーザーのユーザー名、電子メール、およびプロファイルがクライアントに公開されます。

于 2015-11-17T21:03:21.850 に答える
0

デフォルトでは、meteor は、アカウント システムが機能するように、ユーザー コレクション内のドキュメントのユーザー名、ID、および電子メール フィールドを公開します。現在ログインしているユーザーのユーザー名が必要な場合は、次を使用できます。

Meteor.user().username;

autoValue ではなく、クライアント側のヘルパーでこれをテストしましたが、これはサーバーでも機能するはずです。

于 2016-02-19T23:50:17.500 に答える