Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按id匹配集合项目_Javascript_Mongodb_Meteor - Fatal编程技术网

Javascript 按id匹配集合项目

Javascript 按id匹配集合项目,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,两个mongo系列之间的关系。 我有两个集合:条目和标签: // example Entry { "_id": "4ZCBv5ogLStfFxpvp", "title": "Some other title", "entryLabels": [ "TFrYvEujpqbMryWEZ", "rn8Z57NsEYse7nYTo", "rn8Z57NsEYse73YTo" ], "author": "TMviRL8otm3ZsddSt", "create

两个mongo系列之间的关系。

我有两个集合:条目和标签:

// example Entry
{
  "_id": "4ZCBv5ogLStfFxpvp",
  "title": "Some other title",
  "entryLabels": [
    "TFrYvEujpqbMryWEZ",
    "rn8Z57NsEYse7nYTo",
    "rn8Z57NsEYse73YTo"
  ],
  "author": "TMviRL8otm3ZsddSt",
  "createdAt": "2016-01-16T15:21:43.153Z",
  "date": "2016-01-16T15:21:43.153Z"
}

// Example Label
{
  "_id": "9NCNPGH8F5MWNzjkA",
  "color": "#333",
  "name": "Grey Label",
  "author": "TMviRL8otm3ZsddSt"
}
因为一个条目可能有多个标签,所以我将标签ID保留在entryLabels字段中。 我的计划是只保存标签ID,然后在此基础上查询标签集合

如果我有一个labelID,这是可以的,因为我可以基于该ID查询Labels集合并返回一个标签。但是,我有一个ID数组,必须返回多个标签

我的尝试如下(在模板帮助器中):

<代码>标签:功能(事件){ var entryLabels=this.entryLabels; var arr=[] 对于(i=0;i 然后,在模板中:

{{#each labels}}
    {{name}}
    <p>asd</p>
{{/each}}
{{{#每个标签}
{{name}}
自闭症

{{/每个}}

这将返回“asd”3次,但我无法访问标签属性,如名称

所以,我想我的问题是,我怎样才能访问这些属性。 也。。我这样做对吗

我这样做对吗

我会说不。与几乎任何其他数据库一样,mongo可以一次检索多个文档。既然可以,为什么要在
for循环中一次提取一个

labels: function(event){
    var entryLabels = this.entryLabels;
    var arr = Labels.find({_id: {$in: entryLabels}}).fetch();
    return arr;
}

这也将解决“我无法访问名称等标签属性”的问题,因为旧的
arr
数组文档,而不是您期望的文档数组

明智地复制数据可以是创建最佳文档数据库模式的一部分。话虽如此,马丁的回答应该是好的
Labels.find().fetch()
是Meteor Mongo Labels集合上的Meteor方法,而不是Mongo Labels集合上的异步MongoDb查找。

@charliebrownie-它将返回一个数组,并且不会异步运行,因为
fetch
。文档中几乎完全相同的示例(我真的错过了
fetch()
详细信息,再次抱歉!!)(我真的错过了
fetch()
详细信息,再次抱歉!!)
labels: function(event){
    var entryLabels = this.entryLabels;
    var arr = Labels.find({_id: {$in: entryLabels}}).fetch();
    return arr;
}