【发布时间】:2015-09-02 07:49:53
【问题描述】:
我想查找包含给定子文档的文档,假设我的 commits 集合中有以下文档:
// Document 1
{
"commit": 1,
"authors" : [
{"name" : "Joe", "lastname" : "Doe"},
{"name" : "Joe", "lastname" : "Doe"}
]
}
// Document 2
{
"commit": 2,
"authors" : [
{"name" : "Joe", "lastname" : "Doe"},
{"name" : "John", "lastname" : "Smith"}
]
}
// Document 3
{
"commit": 3,
"authors" : [
{"name" : "Joe", "lastname" : "Doe"}
]
}
我想要从上述集合中获得的只是第一个文档,因为我知道我正在寻找带有 2 个 authors 的 commit,它们都具有相同的 name 和 lastname。所以我想出了这个查询:
db.commits.find({
$and: [{'authors': {$elemMatch: {'name': 'Joe,
'lastname': 'Doe'}},
{'authors': {$elemMatch: {'name': 'Joe,
'lastname': 'Doe'}}],
'authors': { $size: 2 }
})
$size 用于过滤掉第三个文档,但查询仍然返回第二个文档,因为 $elemMatch 都返回 True。
我不能对子文档使用索引,因为用于搜索的作者顺序是随机的。有没有办法在不使用 Mongo 的聚合函数的情况下从结果中删除第二个文档?
【问题讨论】:
标签: mongodb aggregation-framework