Azure MongoDB中$in查询异常:仅返回101条而非140条数据
解决Azure MongoDB查询仅返回101条数据的问题
嗨,我碰到过好几个用户遇到类似的状况——你这情况几乎可以肯定是Azure Cosmos DB for MongoDB API的默认分页限制在作祟,本地MongoDB没这个默认限制,之前Azure正常可能是配置或查询逻辑的变化导致的,咱们一步步来排查解决:
最可能的原因:Azure默认的查询结果上限
Azure Cosmos DB for MongoDB API为了控制请求单位(RU)的消耗,默认会给未显式指定limit()的查询设置100条的结果上限,加上第一条刚好就是你看到的101条。之前正常可能是因为之前的查询逻辑里隐式处理了分页,或者最近Azure的默认配置有调整。
解决方法:显式设置足够大的limit
把你的查询代码修改为显式添加limit(),数值设为比你预期的文档总数(140)大的数就行:
FindIterable documents = db.getCollection("employees").find(query).limit(200) // 200足够覆盖140条数据 def outList = documents.collect {it}
备选方案:确保游标完整遍历
有时候collect方法可能只取了游标返回的第一批次数据(Azure默认批次大小是100),手动遍历游标能保证获取所有结果:
def outList = [] MongoCursor cursor = db.getCollection("employees").find(query).iterator() while (cursor.hasNext()) { outList.add(cursor.next()) }
额外排查步骤
- 确认集合实际文档数:在Mongo shell或者Azure Cosmos DB资源管理器里执行
db.employees.countDocuments({dept: 'tech'}),确认确实有140条文档,排除数据被误删的可能。 - 检查查询是否被修改:确认你的
BasicDBObject没有被代码里其他逻辑意外修改,比如有没有额外的过滤条件被悄悄加上。
内容的提问来源于stack exchange,提问作者Xal
相关产品推荐
相关产品推荐

