2016-04-25 4 views
0

私は、サブ文書を含む配列を持っています。私はこのサブ文書内のフィールドをサブ文書の外に持っていく必要があります。ドキュメントはこのようなものです。配列内のフィールドを移動する

field1: "abc" 
field2: "dsf" 
field3: { 

    allowed-type: [ 
       field4: "32" 
} 

フィールドallowed-typeの外側にあるフィールド4をフィールド3の下に置く必要があります。私は、次の

db.collection.find({}).forEach(function (doc) { 
    doc.field3.field4 = 'doc.field3.allowed-type.field4'; 
db.collection.save(doc); }); 

問題は、私は二重引用符を使用せずに、それを参照することはできませんので、配列許さ型にハイフンが含まれていることです試してみました。しかし、二重引用符を使用すると、field4はdoc.field3.allowed-type.field4から値を取るのではなく、文字列として 'doc.field3.allowed-type.field4'に割り当てられます。

+0

「= doc.field3 ['allowed-type'] .field4'? –

答えて

0

集約があなたのソリューションです。最初にドキュメントを巻き戻す必要があります。これは基本的にドキュメントを平坦化し、配列から「32」を取り出します。返された結果を取得し、 "field3"の下のドキュメントである新しいフィールドに "field4"値を投影する必要があります。 pretty()は結果を読みやすい形式で表示するだけです。

db.fields.aggregate(
    {$unwind:"$field3.allowed-type.field4"}, 
    {$project: 
     {field1:1, 
     field2:1, 
     field3: 
      {field4: "$field3.allowed-type.field4" 
}} }).pretty(); 
関連する問題