シェル私は暫定コーディング段階でprintjson
を使用してMongoDBのクエリをデバッグしようとしています。私は中間段階として異なる構造を備えた3つのコレクションから同様のprintjson
出力を達成することができました。私は、これは私がすべての3つの異なるコレクションのために、この時点から、共通のコードを使用することができます思いました。しかし、これは動作していないように見えました。期待どおりに、2つのコレクションは、行儀が、第三は、(Object.keys
関数を使用して)、次の符号化ステップではなかったです。私は3つの質問があります:のMongoDBデバッグ
printjson
はデバッグに適したツールですか?- なぜ類似
printjson
出力のコードは、中間ステップとして、後続の符号化ステップで異なる動作をしますか? - どのように私は
layouts1
とlayouts2
で生成したのと同様の結果を生成するためにlayouts3
にクエリコードを修正することができますか?
三つの異なるコレクションは、以下のとおりです。layouts1
、layouts2
、およびlayouts3
:以下
db.layouts1.insert({
"_id": ObjectId("58e574a768afb6085ec3a388"),
"positions": [{
"_id": ObjectId("58e55f0f68afb6085ec3a2cc"),
"cyan" : [{"unit": "08","side": "5","position": "Far","_id": ObjectId("58e55f0f68afb6085ec3a2d0")}],
"magenta": [{"unit": "08","side": "5","position": "Far","_id": ObjectId("58e55f0f68afb6085ec3a2cd")}],
"yellow": [{"unit": "08","side": "3","_id": ObjectId("58e55f0f68afb6085ec3a2ce")}],
"black": [{"unit": "08","side": "5","position": "Far","_id": ObjectId("58e55f0f68afb6085ec3a2cf")}]
}]
});
db.layouts2.insert({
"_id" : ObjectId("58e574a768afb6085ec3a388"),
"pages" : [{
"_id" : ObjectId("58e542fb68afb6085ec3a1d2"),
"positions" : [
{"cyan": [{ "unit" : "08", "side" : "5","position" : "Far","_id" : ObjectId("58e542fb68afb6085ec3a1d6")}]},
{"magenta": [{"unit" : "08","side" : "5","position" : "Drive Side Far","_id" : ObjectId("58e542fb68afb6085ec3a1d3")}]},
{"yellow": [{"unit" : "08","side" : "3","position" : "Far","_id" : ObjectId("58e542fb68afb6085ec3a1d4")}]},
{"black": [{"unit" : "08","side" : "5","position" : "Far","_id" : ObjectId("58e542fb68afb6085ec3a1d5")}]}
]
}]
});
db.layouts3.insert({
"_id": ObjectId("58e574a768afb6085ec3a388"),
"pages": [{
"_id": ObjectId("58e542fb68afb6085ec3a1d2"),
"positions": [{ "_id": ObjectId("58e55f0f68afb6085ec3a2cc"),
"cyan": [{ "unit": "08", "side": "5", "position": "Far", "_id": ObjectId("58e55f0f68afb6085ec3a2d0") }],
"magenta": [{ "unit": "08", "side": "5", "position": "Far", "_id": ObjectId("58e55f0f68afb6085ec3a2cd") }],
"yellow": [{ "unit": "08", "side": "3", "_id": ObjectId("58e55f0f68afb6085ec3a2ce") }],
"black": [{ "unit": "08", "side": "5", "position": "Far", "_id": ObjectId("58e55f0f68afb6085ec3a2cf") }]
}]}]});
がprintjson
出力を見ることで判断されるように、同様のデータ構造を有するように見える出力を得るために必要なコードです、 3つのコレクションのそれぞれについて以下は
db.layouts1.find().forEach(doc => { doc.positions = doc.positions
.map(position => { Object.keys(position) // Returns a new array conaining all keys for positions
.filter(positionKey => positionKey !== "_id") // Returns a new array without _id
.forEach(positionKey => { printjson(position[positionKey])})})})
db.layouts2.find().forEach(doc => { doc.pages = doc.pages
.map(page => { page.positions
.forEach(position => { Object.keys(position)
.forEach(positionKey => {printjson(position[positionKey])})})})})
db.layouts3.find().forEach(doc => { doc.pages = doc.pages
.map(page => { page.positions // page.positions mapped and is []
.forEach(position => { Object.keys(position) // returns one array with _id, cyan, magenta, etc.
.forEach(positionKey => { printjson(position[positionKey])})})})})
layouts1
、layouts2
のために働くのコードですが、layouts3
のためにしません:
db.layouts1.find().forEach(doc => { doc.positions = doc.positions
.map(position => { Object.keys(position) // Returns a new array conaining all keys for positions
.filter(positionKey => positionKey !== "_id") // Returns a new array without _id
.forEach(positionKey => { position[positionKey]
.forEach(colorDetails => { printjson(Object.keys(colorDetails))
})})})})
db.layouts2.find().forEach(doc => { doc.pages = doc.pages
.map(page => { page.positions
.forEach(position => { Object.keys(position)
.forEach(positionKey => {position[positionKey]
.forEach(colorDetails => { printjson(Object.keys(colorDetails))}) }) })})})
FOLLOWINGは動作しません。それは次のエラーを生成します。TypeError: position[positionKey].forEach is not a function
db.layouts3.find().forEach(doc => { doc.pages = doc.pages
.map(page => { page.positions // page.positions mapped and is []
.forEach(position => {Object.keys(position)
.forEach(positionKey => { position[positionKey]
.forEach(colorDetails => { printjson(Object.keys(colorDetails))
})})})})})