擅长:python、mysql、java
<p>由于$elemMatch只返回数组的第一个匹配元素,因此必须使用聚合来实现目标。问题是:</p>
<pre><code>db.collection.aggregate([
{
$match: {
$or: [
{
"states.ts": {
$eq: 3
}
},
{
"states.ts": {
$eq: 5
}
}
]
}
},
{
$project: {
states: 1
}
},
{
$unwind: "$states"
},
{
$match: {
$or: [
{
"states.ts": {
$eq: 3
}
},
{
"states.ts": {
$eq: 5
}
}
]
}
},
{
$group: {
_id: "$_id",
states: {
$push: "$states"
}
}
}
])
</code></pre>
<p>如果返回了许多文档,那么第一个$match和$project阶段用于查询优化和内存节省</p>