【问题标题】:Is there a way to insert a DB query directly into a new MongoDB on server side?有没有办法将数据库查询直接插入服务器端的新 MongoDB 中?
【发布时间】:2016-02-29 14:26:48
【问题描述】:

我要做的是获取用户的查询客户端(通过搜索功能),通过 Meteor 方法将其发送到服务器,如果有搜索结果,将该查询插入另一个 MongoDB 实例?我需要这个才能将用户的搜索结果显示到客户端。

来自服务器端的类似这样的东西:

UserSearch: function(query){

    var init = Table.find({userId: this.userId}, {data: {Name: query}});

    Search.insert({userId: this.userId, data: init});

  },

显然,这是行不通的。但我正在寻找一种方法,允许将查询从一个数据库插入到新数据库中。

【问题讨论】:

  • 您不能插入游标(这是find() 返回的内容),但您可以插入一个数组,这是在游标上调用fetch() 将返回的内容。不过,我建议不要这样做,因为这种方法会导致严重的性能损失。如果你想将数据返回给用户一次,你可以直接从方法中返回。
  • 你的意思是插入结果还是只插入查询参数?
  • 只插入结果。
  • 为什么有两个 MongoDB 实例?你想解决什么问题?
  • @MabehAl-ZuqYadeek 在页面视图之间共享信息有更好的解决方案,例如将临时信息存储在您的网络服务器上的用户会话数据中,或者让浏览器将其作为 POST 参数传递。将它放入数据库(与您的主数据库不同的数据库,以启动)没有任何意义,只是在几毫秒后检索它然后删除它。数据库用于持久信息。为什么您需要共享信息?通常您会将搜索查询作为请求结果页面的一部分而不是之前执行。

标签: mongodb meteor


【解决方案1】:

所以我认为这里有两个你的问题:

  1. 如何连接到另一个 MongoDB 实例?
  2. 如何将一个查询结果中的数据插入到集合中?

对于#1,引用this SO question,你可以这样做:

var database = new MongoInternals.RemoteCollectionDriver("<mongo url>");
Search = new Mongo.Collection("search", { _driver: database });

对于 #2,您只是缺少 .fetch(),正如 MasterAM 指出的那样:

UserSearch: function(query){
  var init = Table.find({userId: this.userId, 'data.Name': query}).fetch();
  Search.insert({userId: this.userId, data: init});
},

我还稍微修改了您的 Table 查询,因为我认为它不能以当前形式运行。您希望查询对象中的每个字段属性都在同一个对象中。请注意,获取将为您提供一个 Table 对象数组,因此您需要让 Search 集合中的 data 字段反映这一点。

【讨论】:

  • 我会给你最好的答案,因为你回答了我的问题。但是,我发现了一种比将数据从一个数据库传输到另一个数据库更好、更快的方法来共享我的数据。我发现 Session 变量可以很好地将数据数组从一个地方传输到另一个地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
  • 2020-05-03
  • 2021-03-02
  • 1970-01-01
  • 2020-02-08
相关资源
最近更新 更多