从mongo集合中的数组为Select2选项创建标签对象

时间:2015-09-27 05:43:10

标签: javascript mongodb meteor

我有一个mongo集合,其中包含一个名为' tags'的数组字段。我想要做的是创建一个单独的对象,它存储带有标签和值的所有各种标签。最终结果应该是我可以在Meteor应用程序的Select2字段中使用的对象来创建结果选项。我已经接近了,但我的所有解决方案都没有用,而且非常难看(读:不是功能性的javascript)

以下是一份示例文件:

{
"_id":  "sjkjladlj",
"title": "Coldplay is Cool",
"tags": ["music", "yuppie"]
}

现在我想要的最终结果是:

[
{
value: "music",
label: "music"
},
{
value: "yuppies",
label: "yuppies"
},
{
value: "Some tag from another doc"
label: "Some tag from another doc"
}
]

有什么想法吗?

这是我得到的最接近的。

options: function() {
          tagsArray = [];
          ca = Notes.find({}, {tags: 1}).fetch();
          ca.forEach(function(it) {
            result = {};
            result = it.tags;
            tagsArray.push(result);
          });
          console.log(tagsArray);
          return tagsArray;
        }
      }

2 个答案:

答案 0 :(得分:2)

你可以尝试像这样的聚合管道

  

db.colleaction.aggregate([{$项目:{_ ID:0,标签:1}},{$展开:" $标签"},{$项目:{"值#34;:" $标签""拉布勒":" $标签"}}])

答案 1 :(得分:0)

<强>更新。我发布后,我意识到我只需要添加一个内循环。它很难看,但它确实有效。

options: function() {
          tagsArray = [];
          ca = Notes.find({}, {tags: 1}).fetch();
          ca.forEach(function(it) {
            result = {};
            result = it.tags;
            result.forEach(function(child){
              inner = {};
              inner.value = child;
              inner.label = child;
              tagsArray.push(inner);
            });
          });
          console.log(tagsArray);
          return tagsArray;
        }