2016-03-28 10 views
2

スプーン内でmongoDB入力ステップを使用しました。フォームの与えられた文書。..PDI:MongoDBからの2つの配列の同時巻き戻し

{"Number": [ 
    "4700100004" 
], 
"Random": [ 
    "unknown" 
], 
"List_Of_Vals1": [ 
    "3", 
    "2", 
    "1", 
], 
"List_Of_Vals2": [ 
    "1", 
    "2", 
    "3", 
]} 

のために私は生産::

Number  Random List_Of_Vals1 List_Of_Vals2 
"4700100004" "unknown" "3"    ["1","2","3"] 
"4700100004" "unknown" "2"    ["1","2","3"] 
"4700100004" "unknown" "1"    ["1","2","3"] 

しかし、最終的に私をPDI

[{"$unwind":"$List_Of_Vals1"}] 

からMongoのクエリを使用してアレイのうちの1つを巻き戻すことができますよ両方の配列を連続して巻き戻す必要があります。私は書き込みによって行うことができると思いました。

[{"$unwind":"$List_Of_Vals1"},{"$unwind":"$List_Of_Vals2"}] 
すべてのヘルプははるかに高く評価されて

Number  Random List_Of_Vals1 List_Of_Vals2 
"4700100004" "unknown" "3"    "1" 
"4700100004" "unknown" "2"    "2" 
"4700100004" "unknown" "1"    "3" 

は、これは私は何を取得する方法を見つけ出すように見える傾けることなど、重複せずに、両方の巻き戻される「List_Of_Vals1」

Number  Random List_Of_Vals1 List_Of_Vals2 
"4700100004" "unknown" "3"    "1" 
"4700100004" "unknown" "3"    "2" 
"4700100004" "unknown" "3"    "3" 
... 
... 
... 

の重複を返します。 ありがとう

答えて

1

$unwindは、これを実現するために$unwindに導入されました。 $unwindオペレーションによって出力された各ドキュメントに対して、配列インデックスを保持する新しいフィールドが追加されます。

これらのフィールドを$projectおよび$match段に使用すると、出力が適切なサブセット、つまりインデックスが一致するサブセットにフィルタリングできます。両方のアレイが大きいとすることができる場合は、制限の問題に実行することができるようにサイズnの2つの配列を解舒するn x n結果を生成すること

db.test.aggregate([ 
    { $unwind: { path: "$List_Of_Vals1", includeArrayIndex : "index1" } }, 
    { $unwind: { path: "$List_Of_Vals2", includeArrayIndex : "index2" } }, 
    { $project: { 
     _id : 1, 
     Number: 1, 
     Random: 1, 
     List_Of_Vals1: 1, 
     List_Of_Vals2: 1, 
     valid: { $eq: ["$index1", "$index2"] } } 
    }, 
    { $match: { valid: true } } 
]); 

注意。

$zip operatorの今後の機能により、より良い解決策が実現されるはずです。

関連する問題