次のようなドキュメントのコレクションがあります。
{
name: "Johann",
surname: "Esburg",
jobs: [
{
"profession": "chef",
"salary": 1000
}, {
"profession": "gardener",
"salary": 800
}
]
},
{
name: "Sam",
surname: "Sonite",
jobs: [
{
"profession": "doctor",
"salary": 2000
}, {
"profession": "barber",
"salary": 850
}
]
}
結果が次のようになるように、給与が900を超えるすべての仕事を見つけたいと思います。
[
{
"profession": "chef",
"salary": 1000
}, {
"profession": "doctor",
"salary": 2000
}
]
私は mongodb に頼らなければならないと確信していaggregation
ます。私が達成できた最高のものは次のとおりです。
db.persons.aggregate([
{$unwind: "$jobs"},
{$match: {"jobs.salary": {$gt: 900}}},
{$project: {jobs: 1, _id: 0}}])
それは次を返します:
[
{
"jobs": {
"profession": "chef",
"salary": 1000
}
},
{
"jobs": {
"profession": "doctor",
"salary": 2000
}
}
]
しかし、これは私が望むものではありません。jobs
鍵も外してほしい。埋め込みドキュメントの各変数を次のprojection
ように指定する可能性があることはわかっています。
db.persons.aggregate([
{$unwind: "$jobs"},
{$match: {"jobs.salary": {$gt: 900}}},
{$project:
{"profession": "$jobs.profession",
"salary": "$jobs.salary", _id: 0}}])
ただし、埋め込まれたドキュメントは一部のフィールドで異なる可能性があるため、避けたいと思います。