Mor*_*ter 4 javascript mongodb meteor
有没有办法从Meteor的服务器端JavaScript代码中删除Mongo数据库集合?(真的放弃了整个事情,而不仅仅是Meteor.Collection.remove({});它的内容)
另外,还有一种方法可以从服务器端JavaScript代码中删除Meteor.Collection而不删除相应的数据库集合吗?
为什么这样?
userdoc.mailbox[12345]使用下划线或类似搜索子文档(例如用户文档的子文档)会变得安静缓慢(例如,对于大邮箱).所以我想为我的每个用户创建一个数据库,将其用作邮箱,然后一条消息的最大大小为16 MB(非常可接受),我可以使用mongo查询搜索邮箱.
Furthemore,因为我使用的流星,这将是不错的,然后有这个蒙戈DB集合中加载Meteor.Collection每当用户登录.当用户取消激活他/她的账户,数据库当然应该被丢弃,如果用户只需注销,只应删除Meteor.Collection(并在他/她再次登录时恢复).
在某种程度上,我已经有了这个工作,每个用户都有一个自己的邮箱数据库,但如果有人取消他/她的帐户,我必须手动删除这个特定的Mongo集合.此外,我已经将所有mongo db集合保持为Meteor.Collections,因为我无法删除它们.
这是一个运行良好的服务器端代码段,用于每个用户的一个集合邮箱:
var mailboxes = {};
Meteor.users.find({}, {fields: {_id: 1}}).forEach(function(user) {
mailboxes[user._id] = new Meteor.Collection("Mailbox_" + user._id);
});
Meteor.publish("myMailbox", function(_query,_options) {
if (this.userId) {
return mailboxes[this.userId].find(_query, _options);
};
});
Run Code Online (Sandbox Code Playgroud)
而客户端只使用这段客户端代码订阅某个查询:
myMailbox = new Meteor.Collection("Mailbox_"+Meteor.userId());
Deps.autorun(function(){
var filter=Session.get("mailboxFilter");
if(_.isObject(filter) && filter.query && filter.options)
Meteor.subscribe("myMailbox",filter.query,filter.options);
});
Run Code Online (Sandbox Code Playgroud)
因此,如果客户端操作会话变量"mailboxFilter",则更新订阅并且用户在minimongo中获取新的消息.
它工作得非常好,唯一缺少的是db collection drop.
谢谢你的任何暗示!
*我在这里热情地写了"丢弃",这是一个完全错误.我的意思是搜索.
不使用私有方法的解决方案是:
myMailbox.rawCollection().drop();
Run Code Online (Sandbox Code Playgroud)
这在我看来更好,因为Meteor可以在没有任何警告的情况下随机丢弃或重命名私有方法.
在子文档中搜索...
为什么使用子文档?我想每个用户一个文档?
每条消息必须是它自己的文档
这是一个更好的方法,消息的集合,每条消息都被标识给用户。这样,您可以过滤用户在执行发布订阅时看到的内容。
对于许多拥有大型邮箱的用户来说,删除一个数据库中的所有邮件是非常慢的
这是因为大多数 NoSQL 数据库(如果不是全部)都适合读密集型操作,而很少适合写密集型操作。所以写入(更新、插入、删除、擦除)会花费更多时间。
另外,一些在线服务(我认为是 Twitter 或 Yahoo)会在停用帐户时告诉您:“您的数据将在接下来的 N 天内删除。” 或类似的东西。原因之一是删除您的数据需要时间。
无论如何,用户都会离开,因此您可以告诉用户您的帐户已被停用,并且您的数据将在接下来的几天内从我们的数据库中删除。除此之外,您可以立即响应用户,通过向其发送空白回调来异步执行删除操作。
| 归档时间: |
|
| 查看次数: |
3728 次 |
| 最近记录: |