文字列の配列を含むmongoドキュメントがあります。この特定の文字配列をキーと値のペアを含むオブジェクトの配列に変換する必要があります。以下は私のcurent appraochです。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"}]
は十分に私のアプローチに効率的です、またはそれを得るために、上記のクエリを最適化する方法があります希望の結果?
これはmongodb側で行う必要がある特定の理由は何ですか? –
いいえ、それはmongo側で行う必要がある特別な理由はありません。私はMeteorでこれを使用しているので、このクエリはメモリ(mini-mongo)で実行されます。 – blueren
@bluereen Ok。次に、集約が解決策です。 '$ unwind'は結果セットのサイズarray.length倍を掛けることに留意してください。したがって、 '$ project'を前に使用して、必要なフィールドを保持するだけです。おそらくは 'values'だけです。 –