我有这样的架构:
var PricelistSchema = new Schema({
Category : String,
Family: String,
Others: String,
Brand: String,
Volume: Number,
Price: Number,
City: String
});
我使用Distinct values
Family field
方法得到Model.distinct()
的{{1}}。但问题是我还需要知道具有每个不同家庭值的类别的相应值。
我试过mongoose
,但我似乎无法获得正确的结果。有人可以帮助我吗,这非常重要。
示例输出:
MapReduce
我有近3000份这样的文件。我需要在数据库中只获取不同的系列名称,但每个系列名称都应该包含相关的类别。
现在我得到:
{
"_id": "56af4c63ad0fd9ec149694d2",
"Category": "Rum",
"Others": "0",
"Family": "Old Monk",
"Brand": "OLD MONK WHITE RUM",
"Volume": 375,
"Price": 220,
"City": "Delhi"
},
{
"_id": "56af4c63ad0fd9ec149694d3",
"Category": "Rum",
"Others": "0",
"Family": "Old Monk",
"Brand": "OLD MONK WHITE RUM",
"Volume": 750,
"Price": 440,
"City": "Delhi"
}
在数组中,我还需要每个字段的类别。 感谢
答案 0 :(得分:1)
aggregation framework 非常适合这种情况,因为您需要使用 $group
Family字段对文档进行分组>运算符并使用 $addToSet
累加器运算符创建一个数组,该数组包含每个分组文档的不同Category
值。
聚合管道将包含以下操作步骤,以包含为 aggregate()
方法参数:
// Define the pipeline
var pipeline = [
{
"$group": {
"_id": "$Family",
"Categories": { "$addToSet": "$Category" }
}
}
];
// Run the pipeline
PriceList.aggregate(pipeline)
.exec(function (err, result){
if (err) { /* Handle error */};
console.log(JSON.stringify(result, null, 4));
});
或使用流畅的API运行管道:
PriceList.aggregate()
.group({
"_id": "$Family",
"Categories": { "$addToSet": "$Category" }
})
.exec(function (err, result){
if (err) { /* Handle error */};
console.log(JSON.stringify(result, null, 4));
});