gpt4 book ai didi

mongodb - 使用键值对将 mongo 数组转换为对象

转载 作者:IT老高 更新时间:2023-10-28 13:35:54 25 4
gpt4 key购买 nike

我有一个包含字符串数组的 mongo 文档,我需要将这个特定的字符串数组转换为包含键值对的对象数组。以下是我目前的方法。

{
"_id" : ObjectId("57e3720836e36f63695a2ef2"),
"platform" : "A1",
"available" : {
"Community" : {
"attributes" : {
"type" : {
"values" : [
"well-known",
"simple",
"complex"
],
"defaultValue" : "well-known"
},
[......]


}

当前查询:

templateAttributes.find({platform:"V1"}).map(function(c){
//instantiate a new array
var optionsArray = [];
for (var i=0;i< c['available']['Community']['attributes']['type']['values'].length; i++){
optionsArray[i] = {}; // creates a new object
optionsArray[i].label = c['available']['Community']['attributes']['type']['values'][i];
optionsArray[i].value = c['available']['Community']['attributes']['type']['values'][i];
}
return optionsArray;
})[0];

结果:

[{label:"well-known", value:"well-known"},
{label:"simple", value:"simple"},
{label:"complex", value:"complex"}]

我的方法是否足够有效,或者有没有办法优化上述查询以获得相同的预期结果?

最佳答案

不太确定你想对最终结果做什么,因为键和值是一样的。尽管如此,您可以使用聚合框架您可以使用 $unwind 对嵌入的值数组进行非规范化处理。 运算符将其展平,即它为每个数组条目生成每个文档的副本。

展平值数组后,您可以应用 $group 值上的累积运算符来聚合它们。 $project 的最终管道 运算符会将先前分组中的字段整形为所需的格式。

按照此示例了解概念:

templateAttributes.aggregate([
{ "$match": { "platform": "V1" } },
{ "$unwind": "$available.Community.attributes.type.values" },
{
"$group": {
"_id": "$available.Community.attributes.type.values",
"value": { "$first": "$available.Community.attributes.type.values" }
}
},
{
"$project": {
"_id": 0,
"label": "$_id",
"value": 1
}
}
])

由于你使用的是 Meteor,所以添加 meteor meteorhacks:aggregate 将为 Meteor 添加适当的聚合支持,以便您可以在您的集合上运行上述聚合管道。

关于mongodb - 使用键值对将 mongo 数组转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39653872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com