在 Meteor 应用程序中从两个 mongodb 集合(根据 _id 过滤)获取数据
Getting data from two mongodb collections (filtering on _id) in Meteor Application
我在这里遇到问题已经有一段时间了。我正在创建一个 Meteor 应用程序,人们可以在其中注册一个群组、上传一些图像并可以为他们的图像添加特定标签。我得到了一个特定的标签集合,其中包含一个 _id 和一个 name 元素。
用户可以为其图像使用的标签存储在组集合中,但该集合有一个数组(可用标签 _ids 存储在该字段中)
群组合集 - 单个条目
{
"_id" : "uC3PRu3qdcAF2tKK8",
"name" : "Summer Festival 2017",
"token" : "SummerFunUnited",
"tags" : [ "c6vMNnfJzFjEqDSJv", "RYNSsvmafCdRZ6Me9", "9qJD5L6PYCEcbEKcb" ]
}
Tags 集合中存储的 Tags 存储方式如下:
Mongo 标签合集
{ "_id" : "c6vMNnfJzFjEqDSJv", "name" : "Summerfanatic" }
{ "_id" : "RYNSsvmafCdRZ6Me9", "name" : "Sunshineaddict" }
{ "_id" : "9qJD5L6PYCEcbEKcb", "name" : "Danceman" }
我想创建一个管理面板,管理员可以在其中查找特定组中正在使用的标签。路线运行良好,我可以在我的 Meteor 模板中获取组名。
问题是,如果我想显示每个组标签的 名称,我无法让它工作。我的 Mongo 查询不起作用,或者我确实做错了什么。
如果我像这样使用和查询:
Groups.find({ tags: { $in: [ "c6vMNnfJzFjEqDSJv", "RYNSsvmafCdRZ6Me9", "9qJD5L6PYCEcbEKcb" ] }})
我没有得到任何结果。
真的希望大家能帮帮我,或者知道一个更合适的存储标签的方法(以后还是要管理员添加新的标签)
亲切的问候!
您的查询是指:
"在给定数组".
中找到 tags
字段至少包含一个值(即标签 ID)的组文档
因此这与列出与某些给定标签关联的组相关。
您说您想要列出与给定组关联的标签(按名称)。
一旦您掌握了所需的组文档数据,这听起来像是一个非常直接的查询:
"查找 _id
字段在给定数组中的标记文档"
然后使用您的 Blaze 模板遍历这些标签并显示它们的 name
。
类似于:
空格键
{{#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
}
});
}
});
我在这里遇到问题已经有一段时间了。我正在创建一个 Meteor 应用程序,人们可以在其中注册一个群组、上传一些图像并可以为他们的图像添加特定标签。我得到了一个特定的标签集合,其中包含一个 _id 和一个 name 元素。
用户可以为其图像使用的标签存储在组集合中,但该集合有一个数组(可用标签 _ids 存储在该字段中)
群组合集 - 单个条目
{
"_id" : "uC3PRu3qdcAF2tKK8",
"name" : "Summer Festival 2017",
"token" : "SummerFunUnited",
"tags" : [ "c6vMNnfJzFjEqDSJv", "RYNSsvmafCdRZ6Me9", "9qJD5L6PYCEcbEKcb" ]
}
Tags 集合中存储的 Tags 存储方式如下:
Mongo 标签合集
{ "_id" : "c6vMNnfJzFjEqDSJv", "name" : "Summerfanatic" }
{ "_id" : "RYNSsvmafCdRZ6Me9", "name" : "Sunshineaddict" }
{ "_id" : "9qJD5L6PYCEcbEKcb", "name" : "Danceman" }
我想创建一个管理面板,管理员可以在其中查找特定组中正在使用的标签。路线运行良好,我可以在我的 Meteor 模板中获取组名。
问题是,如果我想显示每个组标签的 名称,我无法让它工作。我的 Mongo 查询不起作用,或者我确实做错了什么。
如果我像这样使用和查询:
Groups.find({ tags: { $in: [ "c6vMNnfJzFjEqDSJv", "RYNSsvmafCdRZ6Me9", "9qJD5L6PYCEcbEKcb" ] }})
我没有得到任何结果。
真的希望大家能帮帮我,或者知道一个更合适的存储标签的方法(以后还是要管理员添加新的标签)
亲切的问候!
您的查询是指:
"在给定数组".
中找到tags
字段至少包含一个值(即标签 ID)的组文档
因此这与列出与某些给定标签关联的组相关。
您说您想要列出与给定组关联的标签(按名称)。
一旦您掌握了所需的组文档数据,这听起来像是一个非常直接的查询:
"查找 _id
字段在给定数组中的标记文档"
然后使用您的 Blaze 模板遍历这些标签并显示它们的 name
。
类似于:
空格键
{{#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
}
});
}
});