使用Meteor,我想知道如何最好地处理共享同一服务器端数据库集合的不同客户端集合.考虑下面的例子:我有一个User的集合,在我的客户端,我有一个list of users that are friends,我有一个搜索功能,它对整个用户数据库执行查询,返回一个list of usernames that match the query.

在Publish服务器端方法中,我对同一个集合进行了两次查询,返回了不同的文档集.这些数据应该进入客户端的两个独立集合吗?或者,匹配两个查询的所有用户文档最终是否都应该在同一个集合中?如果是后者,我会复制用于服务器端和客户端查询的代码吗?

在服务器上:

Meteor.publish('searchResults', function(query){
  var re = new RegExp(query, 'i')
  return Users.find({ 'name' : {$regex: re}})
})

在客户机上:

Session.set('searchQuery', null)

Meteor.autosubscribe(function(){
  Meteor.subscribe('searchResults', Session.get('searchQuery'))
})

Template.search.events = {
  'keyup #user-search' : function(e){
    Session.set('searchQuery', e.target.value)
  }
}

_.extend(Template.search, {

  searchResults: function() {
    var re = new RegExp(Session.get('searchQuery'), 'i')
    return Users.find({ 'name' : {$regex: re}})
  }
})

这似乎是一个合理的解决方案,但不是最佳方案.如果我想创建一个新的客户端集合,其中包含来自多个服务器端集合的搜索结果,该怎么办?

推荐答案

在共享区域:

function getSearchUsers(query) {
  var re = new RegExp(query, "i");
  return Users.find({name: {$regex: re}});
}

function getFriendUsers() {
  return Users.find({friend: true});    // or however you want this to work
}

在服务器上:

Meteor.publish("searchUsers", getSearchUsers);
Meteor.publish("friendUsers", getFriendUsers);

在客户机上:

Template.search.onCreated(function () {
   var self = this;
   self.autorun(function () {
     self.subscribe("searchUsers", Session.get("searchQuery"));
   });
});

Template.friends.onCreated(function () {
  this.subscribe("friendUsers");
});

Template.search.helpers({
  searchResults: function () {
    return getSearchUsers(Session.get("searchQuery"));
  }
});

Template.friends.helpers({
  results: function () {
    return getFriendUsers();
  }
});

这其中的关键是,当数据

例如,假设一个服务器端集合中有20条记录.那你就有了

Mongodb相关问答推荐

Spring Data MongoDB中的@ Transactions(+测试容器)

MongoDB更新对象数组

为什么AllowDiskUse不能在$GROUP阶段的聚合管道中工作?

MongoDB/Mongoose查询:使用优先约束检索从位置A到位置B的路径

MongoDB - 将对象转换为数组

DB.collection('comments').find() 不工作

如何在mongoDB中按嵌套文档分组( group by )

以聚合顺序使用 $$ROOT

我怎样才能排序空值在 mongodb 中是最后排序的?

mongodb中类型不相等的查询

Mongoose 的保存回调是如何工作的?

如何在 Mongoose 中更新数组值

将 mongodb 聚合框架结果导出到新集合

MongoError:Topology is closed, please connect despite established database connection

在MongoDB中查询一个半​​径内的位置

MongoDB的数据库管理工具

如何匹配 MongoDB 聚合框架中的 undefined值?

如何在 Ubuntu 上安装 mongodb-clients 最新版本?

停止副本集 MongoDB

我需要手动关闭mongoose连接吗?