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

Javascript 从mongo集合中的数组为Select2选项创建标记对象,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我有一个mongo集合,其中有一个名为“tags”的数组字段。我要做的是创建一个对象,该对象存储所有带有标签和值的各种标记。最终结果应该是一个对象,我可以在Meteor应用程序的Select2字段中使用它来创建结果选项。我已经接近了,但我所有的解决方案都不起作用,而且非常难看(阅读:非功能性javascript) 以下是一份示例文档: { "_id": "sjkjladlj", "title": "Coldplay is Cool", "tags": ["music", "yuppie"] }

我有一个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;
        }
      }

更新。我一发帖就意识到我只需要添加一个内部循环。虽然很难看,但它很管用。

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;
        }

您可以像这样尝试聚合管道

聚合([{$project:{{u id:0,tags:1}},{$unwind:“$tags”},{$project:{“value”:“$tags”,“lable:“$tags”}]))