mongoDB オブジェクトの配列に条件を指定して抽出する
mongoDBで、オブジェクトの配列に条件を指定して抽出する手順を記述してます。「find」に「$all」と「$elemMatch」を使用して条件を指定いきます。
環境
- OS CentOS Stream release 9
- MongoDB 6.0.2
手順
オブジェクトの配列に条件を指定して抽出するには、「$all」と「$elemMatch」を使用します。
db.コレクション名.find( { $all: [{$elemMatch:{条件}}] } )
実際に、以下のデータベース「hoge」にある「bar」というコレクション(テーブル)のドキュメント(レコード)を使用して動作を確認してみます。
> use hoge
> db.bar.find()
[
{
_id: ObjectId("63636f6eaa99398cb1bcb91f"),
name: 'bar1',
tags: [ 'japan', 'a' ],
qty: [
{ size: 'S', num: 10, color: 'blue' },
{ size: 'M', num: 100, color: 'blue' },
{ size: 'L', num: 100, color: 'green' }
]
},
{
_id: ObjectId("63636f84aa99398cb1bcb921"),
name: 'bar2',
tags: [ 'tai', 'b' ],
qty: [ { size: 'M', num: 15, color: 'red' } ]
},
{
_id: ObjectId("63636f91aa99398cb1bcb923"),
name: 'bar3',
tags: [ 'usa', 'c' ],
qty: [
{ size: 'M', num: 20, color: 'red' },
{ size: 'LL', num: 200, color: 'yellow' },
{ size: 'XL', num: 250, color: 'blue' }
]
},
{
_id: ObjectId("63636fa9aa99398cb1bcb925"),
name: 'bar3',
tags: [ 'usa', 'c', 'canada' ],
qty: [
{ size: 'M', num: 20, color: 'red' },
{ size: 'LL', num: 200, color: 'yellow' },
{ size: 'XL', num: 250, color: 'blue' }
]
}
]
条件を指定して抽出してみます。
> db.bar.find( {
qty: {
$all: [
{ $elemMatch : { size: "M", num: { $gt: 50} } },
{ $elemMatch : { num : 100, color: "green" } }
]
}
} )
[
{
_id: ObjectId("63636f6eaa99398cb1bcb91f"),
name: 'bar1',
tags: [ 'japan', 'a' ],
qty: [
{ size: 'S', num: 10, color: 'blue' },
{ size: 'M', num: 100, color: 'blue' },
{ size: 'L', num: 100, color: 'green' }
]
}
]
取得されていることが、確認できます。
and条件も使用できます。
> db.bar.find({ $and: [{tags:"usa"},{tags:"c"}] })
[
{
_id: ObjectId("63636f91aa99398cb1bcb923"),
name: 'bar3',
tags: [ 'usa', 'c' ],
qty: [
{ size: 'M', num: 20, color: 'red' },
{ size: 'LL', num: 200, color: 'yellow' },
{ size: 'XL', num: 250, color: 'blue' }
]
},
{
_id: ObjectId("63636fa9aa99398cb1bcb925"),
name: 'bar3',
tags: [ 'usa', 'c', 'canada' ],
qty: [
{ size: 'M', num: 20, color: 'red' },
{ size: 'LL', num: 200, color: 'yellow' },
{ size: 'XL', num: 250, color: 'blue' }
]
}
]
抽出されていることが確認できます。
-
前の記事
MySQL トリガーを作成する 2022.01.20
-
次の記事
python PySimpleGUIでラジオボタンのfontやサイズを設定する 2022.01.20
コメントを書く