Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按dbref字段划分的Mongodb组_Javascript_Mongodb_Mapreduce_Aggregation Framework - Fatal编程技术网

Javascript 按dbref字段划分的Mongodb组

Javascript 按dbref字段划分的Mongodb组,javascript,mongodb,mapreduce,aggregation-framework,Javascript,Mongodb,Mapreduce,Aggregation Framework,我需要按型号分组的产品。每个产品都有模型字段-DBRef到模型集合。我尝试使用此聚合查询,但出现错误FieldPath字段名不能以“$”开头 聚合查询: db.Products.aggregate([ { $project: { _id: 0, model: 1, isActive: 1 } }, { $group: { _id: "$model.$id", actives: { $push: "$isActive" } }} ]); 产品文档示例: { _id: Ob

我需要按型号分组的产品。每个产品都有模型字段-DBRef到模型集合。我尝试使用此聚合查询,但出现错误FieldPath字段名不能以“$”开头

聚合查询:

db.Products.aggregate([
    { $project: { _id: 0, model: 1, isActive: 1 } },
    { $group: { _id: "$model.$id", actives: { $push: "$isActive" } }}
]);
产品文档示例:

{
    _id: ObjectId("54f48610e31701d2184dede5"),
    isActive: true,
    model: {
        $db: "database",
        $ref: "Models",
        $id: ObjectId("....")
    }
}

手册中曾经有一节明确指出,聚合框架下不支持DBRef以及其他各种BSON类型

旧的段落如下所示:

警告:管道无法对以下类型的值进行操作:二进制、Symbol、MinKey、MaxKey、DBRef、Code和CodeWScope

它可能还在某个地方,但我现在似乎找不到它:

消息线程中还指出,除此之外,聚合框架中不支持该方法,那么您的另一个选项,也是唯一真正的聚合选项,就是使用该方法。作为shell示例:

db.Products.mapReduce 作用{ 发出this.model.$id,{actives:[this.isActive]}; }, 函数键、值{ var result={actives:[]}; values.forEachfunctionvalue{ value.actives.forEachfunctionactive{ result.actives.push-active; }; }; }, {out:{inline:1}} 由于mapReduce结果的任意{u id:,value:{}}结构,它看起来不太好,但它确实允许您正在寻找的聚合类型

这里也提到了JIRA问题,但我不会坚持在这方面有太多的进展

因此,您可以使用mapReduce,但建议您不要使用DBRef,而是根据您的需要定义另一种形式的手动引用,可以嵌入集合和数据库信息,也可以依赖于应用程序架构中此类内容的外部定义。只要遵循相同的规则,就可以对任何具有有效属性名的对象使用聚合框架