【发布时间】:2014-09-20 18:56:13
【问题描述】:
我的 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'} 的水果。
【问题讨论】: