MongoDB:如何过滤 objects 的嵌套数组
MongoDB: How to filter nested array of objects
以下是我在 collection
中的两个条目
{
'_id': ObjectId('6287443338ed135a9e0b1b9d'),
'data': [{'pChange': 166.9602348545503, 'strikePrice': 34000},
{'pChange': -55.820553402827045, 'strikePrice': 34000},
{'pChange': -60.35031847133758, 'strikePrice': 33600},
{'pChange': -49.24757466962035, 'strikePrice': 34500}],
'timestamp': '20-May-2022 13:01:59'
},
{
'_id': ObjectId('7287443338ed13532e0b1b4y'),
data': [{'pChange': 24.8545503, 'strikePrice': 34000},
{'pChange': -51.827045, 'strikePrice': 34100},
{'pChange': -20.133758, 'strikePrice': 33900},
{'pChange': -40.57962035, 'strikePrice': 33500}],
timestamp': '20-May-2022 13:02:45'
},
我想要所有行使价为 34000 的条目。
预期结果:
{
'_id': ObjectId('6287443338ed135a9e0b1b9d'),
'data': [{'pChange': 166.9602348545503, 'strikePrice': 34000},
{'pChange': -55.820553402827045, 'strikePrice': 34000},],
'timestamp': '20-May-2022 13:01:59'
},
{
'_id': ObjectId('7287443338ed13532e0b1b4y'),
data': [{'pChange': 24.8545503, 'strikePrice': 34000}}],
timestamp': '20-May-2022 13:02:45'
},
使用$unwind
将每个数组元素放入其自己的文档中。然后我们可以使用 $match
来过滤 strkePrice
。最后我们$group
到re-assemble数组。
db.collection.aggregate({
$unwind: "$data"
},
{
$match: {
"data.strikePrice": 34000
}
},
{
$group: {
_id: "$_id",
data: {
$push: "$data"
}
}
})
以下是我在 collection
中的两个条目{
'_id': ObjectId('6287443338ed135a9e0b1b9d'),
'data': [{'pChange': 166.9602348545503, 'strikePrice': 34000},
{'pChange': -55.820553402827045, 'strikePrice': 34000},
{'pChange': -60.35031847133758, 'strikePrice': 33600},
{'pChange': -49.24757466962035, 'strikePrice': 34500}],
'timestamp': '20-May-2022 13:01:59'
},
{
'_id': ObjectId('7287443338ed13532e0b1b4y'),
data': [{'pChange': 24.8545503, 'strikePrice': 34000},
{'pChange': -51.827045, 'strikePrice': 34100},
{'pChange': -20.133758, 'strikePrice': 33900},
{'pChange': -40.57962035, 'strikePrice': 33500}],
timestamp': '20-May-2022 13:02:45'
},
我想要所有行使价为 34000 的条目。
预期结果:
{
'_id': ObjectId('6287443338ed135a9e0b1b9d'),
'data': [{'pChange': 166.9602348545503, 'strikePrice': 34000},
{'pChange': -55.820553402827045, 'strikePrice': 34000},],
'timestamp': '20-May-2022 13:01:59'
},
{
'_id': ObjectId('7287443338ed13532e0b1b4y'),
data': [{'pChange': 24.8545503, 'strikePrice': 34000}}],
timestamp': '20-May-2022 13:02:45'
},
使用$unwind
将每个数组元素放入其自己的文档中。然后我们可以使用 $match
来过滤 strkePrice
。最后我们$group
到re-assemble数组。
db.collection.aggregate({
$unwind: "$data"
},
{
$match: {
"data.strikePrice": 34000
}
},
{
$group: {
_id: "$_id",
data: {
$push: "$data"
}
}
})