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