首页 文章

MongoDB allowDiskUse不工作..

提问于
浏览
9

专家们 .

我是MongoDB的新手,但我知道自己遇到了麻烦......例如:

db.test.aggregate(
[
    {$group: {_id: {email: "$email", gender: "$gender"}, cnt: {$sum: 1}}}, 
    {$group: {_id: "$_id.email", cnt: {$sum: 1}}}, 
    {$match: {cnt: 2}}
], 
    {allowDiskUse : true}
)

无论我尝试什么变化,我都会遇到同样的错误(“Pass allowDiskUse:true to opt in”):

错误(“打印堆栈跟踪”)@:0()@src / mongo / shell / utils.js:37([对象数组],[对象对象])@src / mongo / shell / collection.js:866 @ (shell):7未捕获的异常:聚合失败:{“errmsg”:“异常:mongo1.mscnet.com:27017响应收到错误:{$ err:\”$ group超出内存限制,但不允许外部排序 . 传递allowDiskUse:true以选择加入 . \“,代码:16945}”,“code”:16945,“ok”:0}

仅供参考:我使用的是Mongo 2.6

3 回答

  • 16

    请在运行命令中使用聚合查询,它将允许使用allowDiskUse标记 .

    db.runCommand(
       { aggregate: "test",
         pipeline: [
                    {$group: {_id: {email: "$email", gender: "$gender"}, cnt: {$sum: 1}}}, 
                    {$group: {_id: "$_id.email", cnt: {$sum: 1}}}, 
                    {$match: {cnt: 2}}
                   ],
         allowDiskUse: true
       }
    )
    
  • 4

    试着写这样的,

    db.stocks.aggregate([
                         { $project : { cusip: 1, date: 1, price: 1, _id: 0 } },
                         { $sort : { cusip : 1, date: 1 } }
                        ],
                         {
                           allowDiskUse: true
                         }
                        );
    

    还有一件事,
    关于最大文档大小的错误是Mongo固有的 . Mongo永远不会返回大于16兆字节的文档(或其数组) . 我可以提及有关数据大小的任何内容,但这可能意味着您构建的最终结果文档太大 . 尝试减少$ limit参数,也许?首先将其设置为1,运行测试,然后增加测试,并查看执行此操作时结果的大小

  • -1

    如果你正在使用m10或更高版本的MongoDB Atlas,下面是_2377393的修复_如果你通过mongoose从应用程序访问数据,那么它应该是语法作为函数 . 例如:

    MongoDb查询:

    db.collection.user.aggregate([], {allowDiskUse: true})
    

    使用猫鼬:

    User.aggregate([]).allowDiskUse(true);
    

    这将解决应用程序错误:)

相关问题