在Meteor Application

时间:2017-05-03 19:54:15

标签: javascript mongodb meteor mongodb-query meteor-blaze

我有一段时间在这里遇到问题。我正在创建一个Meteor应用程序,人们可以在其中注册一个组,上传一些图像并为其图像提供特定的标签。我得到了一个包含 _id name 元素的标签的特定集合。

用户可以为其图像使用的标记存储在Group集合中,但此集合有一个数组(该字段中存储了可用标记 _ids

群组集 - 单一条目

{ 
"_id" : "uC3PRu3qdcAF2tKK8", 
"name" : "Summer Festival 2017", 
"token" : "SummerFunUnited", 
"tags" : [ "c6vMNnfJzFjEqDSJv", "RYNSsvmafCdRZ6Me9", "9qJD5L6PYCEcbEKcb" ]
 }

存储在Tags集合中的标签存储如下:

Mongo标签集

{ "_id" : "c6vMNnfJzFjEqDSJv", "name" : "Summerfanatic" }
{ "_id" : "RYNSsvmafCdRZ6Me9", "name" : "Sunshineaddict" }
{ "_id" : "9qJD5L6PYCEcbEKcb", "name" : "Danceman" }

我想创建一个管理面板,管理员可以在其中查找特定组中正在使用的标签。路线工作正常,我可以在我的Meteor模板中获取该组的名称。

问题是,如果我想在每个组中显示标签的名称,我就无法使其工作。我的Mongo查询无效,或者我的确做错了。

如果我使用和查询:

Groups.find({ tags: { $in: [ "c6vMNnfJzFjEqDSJv", "RYNSsvmafCdRZ6Me9", "9qJD5L6PYCEcbEKcb" ] }}) 

我没有得到任何结果。

我真的希望你们可以帮助我,或者知道以更合适的方式存储标签的替代方案(在未来,管理员仍然必须添加新标签)。

亲切的问候!

1 个答案:

答案 0 :(得分:0)

您的查询意味着:

查找组文档tags字段在给定数组中包含至少一个值(即标记ID)”。

因此,这与列出与某些给定标签相关联的组相关。

您说要列出与给定组关联的标签(按名称)。

一旦掌握了所需的群组文档数据,这听起来就像一个非常简单的查询:

找到_id字段在给定数组中的标记文档

然后使用Blaze模板循环浏览这些标记并显示其name

类似的东西:

<强> Spacebars

{{#each groupDoc in groupDocs}}
    {{> groupTemplate groupDoc1=groupDoc}}
{{/each}}

<template name="groupTemplate">
    {{#each tagDoc in tagsDocs groupDoc1}}
        {{tagDoc.name}}
    {{/each}}
</template>

<强>的JavaScript

Template.groupTemplate.helpers({
    tagsDocs: function (groupDoc) {
        var tagsIdArray = groupDoc.tags;

        return Tags.find({
            _id: {
                $in: tagsIdArray
            }
        });
    }
});