DocumentDB设置size为200仍仅返回100条文档,如何取消该限制?
问题原因及解决方案
你的代码里聚合管道的操作符名称错误,MongoDB(及兼容它的DocumentDB)的聚合阶段必须以$开头,你自定义的matchOp、lookupOp等键名不会被数据库识别,导致真正生效的只有$skip和$sort阶段,limit逻辑完全没起作用,加上DocumentDB聚合查询默认返回100条结果,所以最终只拿到100条数据。
修正后的代码
session := dao.session.Copy() defer session.Close() pipeline := []bson.M{ { "$match": bson.M{ "campaign": campaignID, }, }, { "$lookup": bson.M{ "from": contactsCollection, "localField": "contactid", "foreignField": "_id", "as": "contact", }, }, { "$unwind": contactAttribute, }, { "$sort": bson.M{"_id": 1}, }, { "$skip": offset, }, { "$limit": pageSize, }, } var result []Test err := session.DB(crmDB).C(dealsCollection).Pipe(pipeline).All(&result) return result, err
额外说明
- 调整阶段顺序:把
$sort移到$skip和$limit之前,确保排序是针对全量符合条件的数据,避免先跳过再排序导致的分页逻辑错误。 - 取消默认限制:只要正确使用
$limit指定你需要的数量(比如200),数据库就会返回对应条数的结果——之前的问题完全是操作符名称错误导致$limit未生效,无需额外取消默认限制。
内容的提问来源于stack exchange,提问作者Juanchi
相关产品推荐
相关产品推荐

