如何在Meteor中添加/删除用户特定数据
How can I add/remove user specific data in Meteor
关于在MongoDB中存储用户数据的几个问题。mongo中存储用户特定数据的最佳位置是什么,如用户设置、用户照片url、用户朋友、用户事件?
在Mongo中,用户数据存储在:Meteor
/ Collections
/ users
/ _id
/ profile
/ services
我应该添加一个新的集合吗?通过以下方式:
/ events / _id's
/ friends / _id's
/ messages / _id's
/ settings
我应该如何发布用户的私人数据并操作这些集合,以确保它被保存,并且其他人不会修改或访问他人的私人数据。
您可以将数据添加到用户配置文件字段中,如下所示:
Meteor.users.update( id, { $set: { 'profile.friends': someValue } } );
要只发布特定的字段,可以这样做:
Meteor.publish( 'users', function () {
return Meteor.users.find( {}, { fields: { 'profile.friends': 1 } } );
});
希望这能有所帮助。
规范化
"数据库规范化是组织关系数据库的属性和表以最大限度地减少数据冗余的过程。"
MongoDB是一个非关系数据库。这使得规范化的数据很难查询。这就是为什么在MongoDB中我们对数据进行非规范化。这使得查询更容易。
这取决于您的用例。问题基本上是什么时候去规范化。这主要是意见问题。但是目标这里有一些优点和缺点:
赞成反规范化
- 检索数据更容易(由于Mongo不是关系数据库)
- 如果您总是批量获取数据,它的性能会更好
反规范化
- 对于像
user.messages
这样的东西,它的伸缩性不好(你不能只是发布一些消息)
在你的情况下,我肯定会选择events
、friends
和messages
的单独集合。设置无法无限扩展。所以我会把它放进users
集合。
安全性
我会使用一个出版物,并允许和否认这一点。让我举一个Messages
:的例子
集合
Messages = new Mongo.Collection('Messages')
Messages.insert({
sender: Meteor.userId,
recipient: Meteor.users.findOne()._id,
message: 'Hello world!'
})
出版物
Meteor.publish('userMessages', function (limit) {
return Messages.subscribe({
$or: [
{sender: this.userId},
{recipient: this.userId}
]
}, {limit: limit})
})
允许
function ownsMessage (user, msg) {
return msg.sender === user ? true : false
}
Messages.allow({
insert: function (userId, newDoc) {
!!userId
},
update: function (userId, oldDoc, newDoc) {
if(
ownsMessage(userId, oldDoc) &&
ownsMessage(userId, newDoc)
) return true
return false
},
remove: function () {
return false
}
})
此代码未经测试,因此可能包含小错误
相关文章:
- 使用javascript(ajax,jquery?)从表中删除对象(用户等)
- 如果用户选择离开网页,如何删除记录
- 从 DOM 中删除/删除 Javascript 用户定义的数组
- 我想限制用户在jquery中输入文本后面的空格,如果它在文本后面,我会删除空格
- 在删除用户之前进行分析
- php使用ajax生成html表,以应用用户操作,如删除、更新和编辑
- 当我的响应菜单打开时,我如何删除用户转到侧面的功能
- 当用户向下滚动我的网页时,如何删除chrome地址栏周围的边框
- 如何阻止用户删除handontable中标题行中的单元格
- 检测用户是否没有't输入任何内容/删除输入jQuery
- 如何防止用户删除文本输入中的前三个字符
- 如果用户更改下拉选择,jQuery将删除单选按钮/输入选项
- 如何在提交时使用 Jquery 从文本输入框中删除用户输入
- 使用 http 删除终止用户会话
- 当用户删除对文本框的关注时的Javascript事件
- 我可以通过javascript使用上下文菜单检测用户删除吗
- 用户删除特定的子元素
- 为移动用户删除html5视频背景的最佳方法是什么?
- Firebase用户删除不起作用
- 让用户删除选定的fabric js对象