db.getCollection('xxxxxxxx').aggregate(
[
{
"$match": {
"campaigns.campaign_id":ObjectId("5c6e50932fb955f81b0c9f59")
}
},
{
"$sort": {
"campaigns.updatedAt": 1,
"_id": -1
}
},
{
"$limit": 15
},
{
"$lookup": {
"from": "callresults",
"localField": "currentStat.sales_funnel_id",
"foreignField": "_id",
"as": "sale_funnels"
}
},
{
"$lookup": {
"from": "callresults",
"localField": "currentStat.callresult_id",
"foreignField": "_id",
"as": "callresults"
}
},
{
"$lookup": {
"from": "accounts",
"localField": "currentStat.qc.account_id",
"foreignField": "_id",
"as": "accounts"
}
},
{
"$match": {
"$or": [
{
"姓名": /137/
},
{
"电话号码": /137/
},
{
"电子邮件": /137/
},
{
"城市": /137/
},
{
"区域": /137/
},
{
"备注": /137/
}
]
}
}
]
)
执行上述SQL查询的结果为0($ limlit在$ lookup之前) 执行上述SQL查询的结果为0($ limlit在$ lookup之前) 执行上述SQL查询的结果为0($ limlit在$ lookup之前)
如果$ limlit跟在$ lookup之后
db.getCollection('xxxxxxxxxxx').aggregate(
[
{
"$match": {
"campaigns.campaign_id":ObjectId("5c6e50932fb955f81b0c9f59")
}
},
{
"$sort": {
"campaigns.updatedAt": 1,
"_id": -1
}
},
{
"$lookup": {
"from": "callresults",
"localField": "currentStat.sales_funnel_id",
"foreignField": "_id",
"as": "sale_funnels"
}
},
{
"$lookup": {
"from": "callresults",
"localField": "currentStat.callresult_id",
"foreignField": "_id",
"as": "callresults"
}
},
{
"$lookup": {
"from": "accounts",
"localField": "currentStat.qc.account_id",
"foreignField": "_id",
"as": "accounts"
}
},
{
"$match": {
"$or": [
{
"姓名": /137/
},
{
"电话号码": /137/
},
{
"电子邮件": /137/
},
{
"城市": /137/
},
{
"区域": /137/
},
{
"备注": /137/
}
]
}
},
{
"$limit": 15
}
]
)
那是为什么? 这是为什么? 这是为什么? 这是为什么? 为什么会这样?
答案 0 :(得分:0)
在第一种情况下(查找前限制),仅对前15个匹配的文档执行查找。但是,当限制在管道的末尾时,将对所有匹配的文档进行查找,然后应用该限制。
举一个简单的例子
此查询查找字段“ n”的值为1的所有文档,然后显示前15个匹配的文档。
db.collection.aggregate([{$match: {"n" : 1}}, {$limit: 15}])
但是,以下查询将获取前15个文档,然后仅对这15个文档进行匹配。
db.collection.aggregate([{$limit: 15}, {$match: {"n" : 1}}])
答案 1 :(得分:0)
1)在第一种情况下。您将结果限制为15,并执行匹配条件。因此,匹配条件仅适用于15个文档。
2)在第二种情况下,您要匹配集合中的所有文档,然后限制结果。