Javascript 按dbref字段划分的Mongodb组
我需要按型号分组的产品。每个产品都有模型字段-DBRef到模型集合。我尝试使用此聚合查询,但出现错误FieldPath字段名不能以“$”开头 聚合查询: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
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,而是根据您的需要定义另一种形式的手动引用,可以嵌入集合和数据库信息,也可以依赖于应用程序架构中此类内容的外部定义。只要遵循相同的规则,就可以对任何具有有效属性名的对象使用聚合框架