在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" ] }}) 

我没有得到任何结果回来。

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

亲切的问候!

+0

我看到你的数据结构没有特别的问题。但是,如果你的目标是查找_tags_,你为什么要查询'Groups'呢?为什么选择器中的双曲花括号? – ghybs

+0

双花括号是因为堆栈溢出而覆盖它(抱歉,错字,它不在我的代码中)。 问题是我不知道从哪里开始的Mongo查询,所以不是真的有一个awnser为什么我看我的Groups集合。 在短短的一段时间内:我不知道该怎么做才能使它工作。 –

+0

您使用[$ in](https://docs.mongodb.com/manual/reference/operator/query/in/#use-the-in-operator-to-match-values-in-an-array)看起来是正确的,你的模型结构也很有意义。 –

您所查询的意思是:

找到其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 
      } 
     }); 
    } 
}); 
+0

对group.tags数组中的$ in使用Tags.find()查询解决了我的问题! ..非常感谢你..我仍然需要很多东西来学习我猜! –