【发布时间】:2022-01-15 21:16:08
【问题描述】:
这是我想从中获取列表中所有 child.item('Toy1'、'Toy2' 等)的文档之一。
{
_id: 'Toy',
name: 'Toyname',
child: [
{ item: 'Toy1', isActive: '1', Type: 'New' },
{ item: 'Toy2', isActive: '2', Type: 'Old' }
]
}
我试过了
pipeline = [
{
"$match": {
"_id": "Toy",
"child.isActive": '1'
}
},
{
"$unwind":
"$child"
},
]
list(DB.Category.aggregate(pipeline))
[{'_id': 'Toy', 'name': 'Toyname', 'child': {'item': 'Toy1', 'isActive': 1, 'Type': 'New'}}, {'_id': 'Toy', 'name': 'Toyname', 'child': {'item': 'Toy2', 'isActive': 2,
'Type': 'Old'}}]
并在 dbshell 上尝试过这个
#> db.Category.find({name:"Toyname",child:{$elemMatch:{Type:"New"} }})
[
{
_id: 'Toy',
name: 'Toyname',
child: [
{ item: 'Toy1', isActive: '1', Type: 'New' },
{ item: 'Toy2', isActive: '2', Type: 'Old' }
]
}
]
但正如您所见,它为我提供了数组中的两个项目。我正在使用 pymongo 4.0.1。
期望列表为 o/p 满足匹配条件,如 $match 中的 Type:'New' 应返回 'Toy1',isActive:'2' 应返回 'Toy2'。 我希望我能够清楚地提出我的要求。
【问题讨论】:
-
如果您以 JSON 格式发布预期结果会很有帮助。
-
我想要列表中所有属于 Type:'new' 或 isActive:'1' 的项目。
-
看重复的问题,How to filter array in subdocument with MongoDB,可以使用$filter表达式操作符,条件使用$and操作符。