在Meteor应用程序中从两个mongodb集合中获取数据(在_id上过滤)
我在这里遇到了相当长的一段时间。我正在创建一个Meteor应用程序,人们可以注册一个组,上传一些图像,并可以为他们的图像提供特定的标签。我得到了一个标签的特定集合,该标签包含一个元素_id和一个名称元素。在Meteor应用程序中从两个mongodb集合中获取数据(在_id上过滤)
,用户可以使用这些标签,他们的图像,存储在一个组集合,但此集合了一个数组(与现有的标签_ids存储在该场)
组系列 - 单次入境
{
"_id" : "uC3PRu3qdcAF2tKK8",
"name" : "Summer Festival 2017",
"token" : "SummerFunUnited",
"tags" : [ "c6vMNnfJzFjEqDSJv", "RYNSsvmafCdRZ6Me9", "9qJD5L6PYCEcbEKcb" ]
}
存储在标签采集的标签存储,如:
蒙戈标签COLLEC重刑
{ "_id" : "c6vMNnfJzFjEqDSJv", "name" : "Summerfanatic" }
{ "_id" : "RYNSsvmafCdRZ6Me9", "name" : "Sunshineaddict" }
{ "_id" : "9qJD5L6PYCEcbEKcb", "name" : "Danceman" }
我想创建一个管理控制台,管理员可以查找在特定组正在使用哪些标签。该路线工作正常,我可以在我的Meteor模板中获得该组的名称。
问题是,如果我想显示名称的每个组的标签我不能得到它的工作。我的Mongo Queries不工作,或者我真的做错了什么。
如果我使用和查询,如:
Groups.find({ tags: { $in: [ "c6vMNnfJzFjEqDSJv", "RYNSsvmafCdRZ6Me9", "9qJD5L6PYCEcbEKcb" ] }})
我没有得到任何结果回来。
我真的希望你们能够帮助我,或者知道以更正确的方式存储标签的替代方案(在未来,管理员必须添加新标签)。
亲切的问候!
您所查询的意思是:
“找到其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
}
});
}
});
对group.tags数组中的$ in使用Tags.find()查询解决了我的问题! ..非常感谢你..我仍然需要很多东西来学习我猜! –
我看到你的数据结构没有特别的问题。但是,如果你的目标是查找_tags_,你为什么要查询'Groups'呢?为什么选择器中的双曲花括号? – ghybs
双花括号是因为堆栈溢出而覆盖它(抱歉,错字,它不在我的代码中)。 问题是我不知道从哪里开始的Mongo查询,所以不是真的有一个awnser为什么我看我的Groups集合。 在短短的一段时间内:我不知道该怎么做才能使它工作。 –
您使用[$ in](https://docs.mongodb.com/manual/reference/operator/query/in/#use-the-in-operator-to-match-values-in-an-array)看起来是正确的,你的模型结构也很有意义。 –