Javascript 如何在Meteor中添加/删除特定于用户的数据

Javascript 如何在Meteor中添加/删除特定于用户的数据,javascript,mongodb,meteor,meteor-accounts,Javascript,Mongodb,Meteor,Meteor Accounts,关于在MongoDB中存储用户数据的几个问题。mongo中存储用户特定数据(如用户设置、用户照片url、用户好友、用户事件)的最佳位置是什么 在Mongo中,用户数据存储在: 流星 我应该添加新的集合吗?以以下方式: / events / _id's / friends / _id's / messages / _id's / settings 我应该如何发布用户的私有数据并操作这些集合,以确保它已保存,并且其他人不会修改或访问其

关于在MongoDB中存储用户数据的几个问题。mongo中存储用户特定数据(如用户设置、用户照片url、用户好友、用户事件)的最佳位置是什么

在Mongo中,用户数据存储在: 流星

我应该添加新的集合吗?以以下方式:

        / events / _id's
        / friends / _id's
        / messages / _id's
        / settings
我应该如何发布用户的私有数据并操作这些集合,以确保它已保存,并且其他人不会修改或访问其他人的私有数据。

MongoDB是一个非关系数据库。这使得标准化数据很难查询。这就是为什么在MongoDB中我们要对数据进行非规范化。这使得查询更容易

这取决于您的用例。问题基本上是什么时候去民主化。这主要是意见的问题。但客观上,这里有一些优点和缺点:

支持非正规化
  • 检索数据更容易(因为Mongo不是关系数据库)
  • 如果您总是批量获取数据,那么它的性能会更好
非正规化的反对者
  • 对于
    user.messages
    (你不能只公布一些消息)这样的东西,它的伸缩性不好
在你的情况下,我肯定会为
事件
朋友
消息
单独收集。设置不能无限扩展。所以我把它放到
users
集合中

安全 我会使用一个出版物,并允许和否认这一点。让我为
消息
举个例子:


此代码未经测试,因此可能包含小错误

您可以向用户配置文件字段添加数据,如下所示:

Meteor.users.update( id, { $set: { 'profile.friends': someValue } } );
Meteor.publish( 'users', function () {
    return Meteor.users.find( {}, { fields: { 'profile.friends': 1 } } );
});
要仅发布特定字段,可以执行以下操作:

Meteor.users.update( id, { $set: { 'profile.friends': someValue } } );
Meteor.publish( 'users', function () {
    return Meteor.users.find( {}, { fields: { 'profile.friends': 1 } } );
});

希望这有帮助。

Meteor.users.find({},
替换为
Meteor.users.find({u id:this.userId},…
为了只接收我的私人数据。嗯,当数据库将访问10000个用户时,如果每个用户都会收到10000个朋友列表,我想这可能会杀死服务器。好的,在阅读了建议之后,我得到的是:非规范化与发布某些数据的整个集合有关,规范化与只发布部分数据有关以及,对于您使用的规范化消息
订阅
(用户ID消息)而不是
find
,然后仅当用户
ownsMessage
时才设置允许规则。我在我的答案上添加了一个关于非规范化的解释。您对它的理解有点不太清楚。很抱歉,混淆了,我以为您知道它是什么。有关订阅和查找的信息,请阅读。我还添加了指向在我的回答中有文档。如果在此之后您还有问题,我很乐意帮助您。:)
Meteor.users.update( id, { $set: { 'profile.friends': someValue } } );
Meteor.publish( 'users', function () {
    return Meteor.users.find( {}, { fields: { 'profile.friends': 1 } } );
});