关于在MongoDB中存储用户数据的几个问题。 mongo存储用户特定数据的最佳位置是什么,例如用户设置,用户照片网址,用户朋友,用户事件?
在Mongo中,用户数据存储在: 流星
/ Collections
/ users
/ _id
/ profile
/ services
我应该在那里添加新的收藏品吗?以下列方式:
/ events / _id's
/ friends / _id's
/ messages / _id's
/ settings
我应该如何发布用户的私人数据并操纵此集合,以确保它是保存的,没有其他人可以修改或访问其他人的私人数据。
答案 0 :(得分:1)
MongoDB是一个非关系型数据库。这使得规范化数据难以查询。这就是为什么在MongoDB中我们对数据进行非规范化。这使得查询变得更容易。
这取决于您的用例。问题基本上是什么时候去正规化。这主要是一个意见问题。但目标在这里有一些优点和缺点:
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
}
})
此代码未经测试,因此可能包含小错误
答案 1 :(得分:1)
您可以将数据添加到用户个人资料字段,如下所示:
Meteor.users.update( id, { $set: { 'profile.friends': someValue } } );
要仅发布特定字段,您可以执行以下操作:
Meteor.publish( 'users', function () {
return Meteor.users.find( {}, { fields: { 'profile.friends': 1 } } );
});
希望这有帮助。