我有类似于这样结构的MongoDB文档:
{_id: ObjectId("53d760721423030c7e14266f"),
fruit: 'apple',
vitamins: [
{
_id: 1,
name: 'B7',
usefulness: 'useful',
state: 'free',
}
{
_id: 2,
name: 'A1',
usefulness: 'useful',
state: 'free',
}
{
_id: 3,
name: 'A1',
usefulness: 'useful',
state: 'non_free',
}
]
}
{_id: ObjectId("53d760721423030c7e142670"),
fruit: 'grape',
vitamins: [
{
_id: 4,
name: 'B6',
usefulness: 'useful',
state: 'free',
}
{
_id: 5,
name: 'A1',
usefulness: 'useful',
state: 'non_free',
}
{
_id: 6,
name: 'Q5',
usefulness: 'non_useful',
state: 'non_free',
}
]
}
我想查询并获取所有既有 {name: 'A1', state: 'non_free'}
,又有 {name: 'B7', state: 'free'}
的水果。如果无法获取它们,至少我希望能够计算这些条目,并且如果 pymongo 中存在等效的代码,我想知道如何编写它。对于给定的示例,我只想检索苹果(第一个)文档。
如果我使用
$elemMatch
,它仅适用于一个条件,而不是两个条件。例如,如果我查询 find({'vitamins': {'$elemMatch': {'name': 'A1', 'state': 'non_free'}, '$elemMatch': {'name': 'B7', 'state': 'free'}}})
,它将检索出所有具有 {'name': 'B7', 'state': 'free'}
的水果。
$and
而不是$or
。已更新答案。 - Philipp$and
替代$or
。 - Barno$and
的数组。 - Philipp