我正在aggregation result exceeds maximum document size (16MB)使用pymongo进行mongodb聚合的错误.
我首先使用该limit()选项克服了它.但是,在某些时候我得到了
Exceeded memory limit for $group, but didn't allow external sort. Pass allowDiskUse:true to opt in." error.
Run Code Online (Sandbox Code Playgroud)
好的,我会用这个{'allowDiskUse':True}选项.当我在命令行上使用它时,此选项有效,但是当我尝试在我的python代码中使用它时
result = work1.aggregate(pipe, 'allowDiskUse:true')
Run Code Online (Sandbox Code Playgroud)
我收到TypeError: aggregate() takes exactly 2 arguments (3 given)错误.(尽管在http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.aggregate:aggregate(pipeline,** kwargs)中给出了定义.
我尝试使用runCommand,或者说它的pymongo等价:
db.command('aggregate','work1',pipe, {'allowDiskUse':True})
Run Code Online (Sandbox Code Playgroud)
但现在我回到'聚合结果超过最大文档大小(16MB)'错误
如果你需要知道
pipe = [{'$project': {'_id': 0, 'summary.trigrams': 1}}, {'$unwind': '$summary'}, {'$unwind': '$summary.trigrams'}, {'$group': {'count': {'$sum': 1}, '_id': '$summary.trigrams'}}, {'$sort': {'count': -1}}, {'$limit': 10000}]
Run Code Online (Sandbox Code Playgroud)
谢谢
如何通过一个字符串数组进行排序查询,该字符串将"stage" : "SORT"在其计划中执行?
我正在使用mongo 3.6
"mycoll"集合包含大约500,000个这样的文档:
{
someobject:{
arrayfield:["asd","qwe"]
}
}
{
someobject:{
arrayfield:["zxc"]
}
}
Run Code Online (Sandbox Code Playgroud)
这个查询
db.mycoll.find().sort({ "someobject.arrayfield": 1 }).skip(125340).limit(20)
Run Code Online (Sandbox Code Playgroud)
产生错误
排序操作使用的RAM超过最大33554432字节
我有"someobject.arrayfield"的索引,但是explain()给了我:
"winningPlan" : {
"stage" : "SKIP",
"skipAmount" : 125340,
"inputStage" : {
"stage" : "SORT",
"sortPattern" : {
"someobject.arrayfield" : 1
},
"limitAmount" : 125360,
"inputStage" : {
"stage" : "SORT_KEY_GENERATOR",
"inputStage" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"someobject.arrayfield" : 1
},
"indexName" : "arrayfield_indexname",
"isMultiKey" …Run Code Online (Sandbox Code Playgroud) 使用 mongo sort 对 200 万条记录进行排序是否可能?
从MongoDB文档中,明确提到“当排序操作消耗超过32兆字节时,MongoDB返回错误”。
但我需要对大量记录进行排序。怎么做?