从流星应用程序中的两个mongoDB集合(在_id上进行过滤)获取数据



我在这里有一个问题。我正在创建一个流星应用程序,人们可以在其中注册一个组,上传一些图像,并可以为其图像提供特定的标签。我有一个特定的集合,该标签容纳 _id 和a name 元素。

用户可以在图像中使用的标签存储在组集合中,但是该集合有一个数组(带有该字段中存储的可用标签 _ids (

组集合 - 单条目

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

存储在标签集合中的标签被存储为:

Mongo Tags Collection

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

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

问题是,如果我想显示每个组标签的名称,我无法使其工作。我的Mongo查询不起作用,或者我真的做错了什么。

如果我使用并查询:

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

我没有结果。

我真的希望你们能帮助我,或者知道以更正确的方式存储标签的替代方法(将来仍然必须添加管理员的新标签(。

善意!

您的查询含义是:

" 查找tags字段中至少包含一个值(即标记ID(的组文档"。

,这将与与某些给定标签相关的列表组有关。

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

一旦您手头就有所需的组文档数据,这听起来像是一个非常直截了当的查询:

" 查找_id字段在给定数组中的标签文档"

然后使用您的燃烧模板循环浏览这些标签并显示其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
            }
        });
    }
});

最新更新