【问题标题】:Meteor - Merging Data from multiple CollectionsMeteor - 合并来自多个集合的数据
【发布时间】:2016-09-27 06:27:05
【问题描述】:

我一直在搜索如何合并来自多个集合的数据,然后使用模板助手功能客户端将其发送到模板。

我参考了Merging collections in Meteor给出的解决方案

以下是我的代码:

模板 HTML:

  <template name="search_results">

    <div class="col-md-12">

        {{#if Template.subscriptionsReady}}


        <table id="datatable" class="display" cellspacing="0" width="100%">
    <thead>
        <tr>
         <th>Type</th>
         <th>Project Name</th>
         <th>_id</th>
        </tr>
    </thead>

    <tbody>

                {{#each SearchData}}
                <tr>
                <td>{{search_type}}</td>
                <td>{{name}}</td>
                <th>{{_id}}</th>
                </tr>
                {{/each}}

                </tbody>
            </table>

        {{else}}
        <div class="loading">{{>spinner}}</div>
        {{/if}}


    </div>


</template>

模板助手功能:

Template.search_results.helpers({

    SearchData: function() {

        var project_name = Router.current().params.query.search;

        var Projects = Projects.find({project_name: { $regex : project_name, $options:"i" } }).map( function ( Project ) { return { _id: Project._id, name: Project.project_name, search_type: 'Projects' }; }).fetch();

        var CustomerAccounts =  CustomerAccounts.find({account_name: { $regex : project_name, $options:"i" } }).map( function ( CustomerAccount ) { return { _id: CustomerAccount._id, name: CustomerAccount.account_name, search_type: 'Accounts' }; }).fetch();

        var docs = Projects.concat(CustomerAccounts);

        return docs;

    }


  });

我已尝试使用以下代码从单个集合发送数据,并且工作正常:

return Projects.find({project_name: { $regex : project_name, $options:"i" } }).map( function ( Project ) { return { _id: Project._id, name: Project.project_name, search_type: 'Projects' }; });

但我想合并两个集合并将数据发送到模板,我错在哪里,有什么好的方法?

【问题讨论】:

  • 这个问题需要以下内容:(1) 样本输入,(2) 所需输出,(3) 当前输出,包括控制台中的任何错误。

标签: javascript mongodb meteor merge mongodb-query


【解决方案1】:

我犯了一个错字现在问题已更正:

在下面检查我的更正代码

    var projects = Projects.find({project_name: { $regex : project_name, $options:"i" } }).map( function ( Project ) { return { _id: Project._id, name: Project.project_name, search_type: 'Projects' }; });

    var customeraccounts =  CustomerAccounts.find({account_name: { $regex : project_name, $options:"i" } }).map( function ( CustomerAccount ) { return { _id: CustomerAccount._id, name: CustomerAccount.account_name, search_type: 'Accounts' }; });

    var docs = projects.concat(customeraccounts);

    return docs;

我创建了与 Collection Name 相同的变量名,然后重新创建,然后将其更改为小写,而不是 var Projects 我将其更改为 var 项目,

第二件事我也删除了 fetch()

问题现已解决,正如 David 建议我删除 fetch() 一样,我将他的答案标记为正确,尽管我的代码还有另一个变量名问题。

【讨论】:

    【解决方案2】:

    游标的map 函数返回一个数组,因此在该数组上调用fetch 会引发错误。尝试删除 fetch 调用,看看是否有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多