我有一段时间在这里遇到问题。我正在创建一个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" ] }})
我没有得到任何结果。
我真的希望你们可以帮助我,或者知道以更合适的方式存储标签的替代方案(在未来,管理员仍然必须添加新标签)。
亲切的问候!
答案 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
}
});
}
});