使用mongoose的aggregate查询,Nodejs中出现[Error: parseError occured]的问题

使用mongoose的aggregate查询,Nodejs中出现[Error: parseError occured]的问题

以下源代码: articleModel.aggregate( { ’$match’:{‘category’:category} }, { ’$sort’: {‘id’: -1} }, { ’$group’: { ’_id’: “$focus.is”, ‘data’:{ ’$push’:{ ‘title’:"$title", ‘id’:"$id", ‘content’:"$content", ‘arrImgUrl’:"$arrImgUrl" } } } }, function(err,result){ if(err){ console.log(err); callback(err); }else{ var arr = result[0].data.slice(0,4).concat(result[1].data.slice(0,10)); callback(null,arr); } } ); 打印出[Error: parseError occured]错误,百度,bing了一星期也没找到原因,哪位大侠给看看?谢谢 mongodb:2.4.1 mongoose:3.8.14


3 回复

对于您提到的在使用 Mongoose 的 aggregate 查询时遇到 [Error: parseError occured] 错误的情况,可能是由于查询语法不正确或者版本兼容性问题导致的。以下是可能的原因及修正后的代码示例:

原因分析

  1. 语法错误:Mongoose 的聚合查询需要使用数组来表示多个阶段。
  2. 字段引用错误:在 $group 阶段,字段名应该直接使用变量或字符串,而不是通过 <a href="http://focus.is">focus.is</a> 这样的方式。

修正后的代码

const articleModel = require('./models/article'); // 假设这是你的模型文件路径

// 示例 category 变量
const category = "exampleCategory";

articleModel.aggregate([
    // 第一个阶段:匹配 category
    {
        $match: { category: category }
    },
    // 第二个阶段:按 id 降序排序
    {
        $sort: { id: -1 }
    },
    // 第三个阶段:分组并聚合数据
    {
        $group: {
            _id: "$focus.is", // 确保 focus.is 是正确的字段名
            data: {
                $push: {
                    title: "$title",
                    id: "$id",
                    content: "$content",
                    arrImgUrl: "$arrImgUrl"
                }
            }
        }
    }
], function (err, result) {
    if (err) {
        console.log(err);
        callback(err);
    } else {
        var arr = result[0].data.slice(0, 4).concat(result[1].data.slice(0, 10));
        callback(null, arr);
    }
});

关键点解释

  • 数组形式:Mongoose 要求聚合管道(pipeline)必须以数组的形式传递每个阶段。
  • 字段引用:确保所有字段引用都是正确的,并且不要使用 HTML 标签或其他非标准格式。
  • 版本兼容性:您使用的 MongoDB 和 Mongoose 版本较旧,建议升级到最新版本以获得更好的支持和性能。

如果上述修改后仍然无法解决问题,建议检查数据库中的文档结构是否与预期一致,以及是否有其他潜在的错误信息被忽略。


应该是mongose的validate给出的error 你去schema中检查一下category、focus.is的定义 然后debug以下实际的数据是否符合schema中定义的规则

这种事情如果在stackoverflow搜索不到,建议果断放弃靠搜索寻求帮助 最有效的方式还是靠自己不断想办法排障找出问题根源

根据你的描述,问题可能出在 aggregate 查询的格式上。Mongoose 的 aggregate 方法需要一个数组作为参数,其中包含多个聚合管道操作符对象。你当前的写法是将每个管道操作符单独传递,这会导致解析错误。

以下是修改后的代码示例:

articleModel.aggregate([
    {
        $match: {
            category: category
        }
    },
    {
        $sort: {
            id: -1
        }
    },
    {
        $group: {
            _id: "$focus.is",
            data: {
                $push: {
                    title: "$title",
                    id: "$id",
                    content: "$content",
                    arrImgUrl: "$arrImgUrl"
                }
            }
        }
    }
], function(err, result) {
    if (err) {
        console.log(err);
        callback(err);
    } else {
        var arr = result[0].data.slice(0, 4).concat(result[1].data.slice(0, 10));
        callback(null, arr);
    }
});

解释:

  1. $match 阶段:用于筛选出特定分类的文章。
  2. $sort 阶段:按 id 字段降序排列。
  3. $group 阶段:按 focus.is 字段分组,并将符合条件的数据放入数组中。

注意将所有的字符串引号从中文全角改为英文半角,以确保语法正确。此外,确保 focus.is 是一个存在的字段,并且数据结构与预期一致。

如果问题仍然存在,请检查 MongoDB 版本是否支持这些操作,或者是否有其他未捕获的错误。

回到顶部