我在这里有一个问题。我正在创建一个流星应用程序,人们可以在其中注册一个组,上传一些图像,并可以为其图像提供特定的标签。我有一个特定的集合,该标签容纳 _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
}
});
}
});