我对MongoDB的聚合框架非常陌生,所以我不知道如何做到这一点。MongoDB聚合但不包括某些项目
我有一个结构类似这样的数据模型:
{
name: String,
store: {
item1: Number,
item2: Number,
item3: Number,
item4: Number,
},
createdAt: Date
}
我要回报每一位item'i平均价格”。我试着用这个查询:
db.commerces.aggregate([
{
$group: {
_id: "",
item1Avg: { $avg: "$store.item1"},
item2Avg: { $avg: "$store.item2"},
item3Avg: { $avg: "$store.item3"},
item4Avg: { $avg: "$store.item4"}
}
}
]);
问题是,当一个项目没有设置价格时,它以“-1”的形式存储在数据库中。
我不希望这些值污染平均结果。是否有任何方法来限制集合,只考虑当价格> 0时。
$match
运营商之前$group
不是一个解决方案,因为我想返回所有的平均价格。
谢谢!
编辑:在这里,你必须输入&期望输出的一个例子:
[{
name: 'name',
store: {
item1: 10,
item2: -1,
item3: 12,
item4: 3,
}
},
{
name: 'name2',
store: {
item1: 10,
item2: -1,
item3: -1,
item4: 2,
}
},...]
的期望输出:
{
item1Avg: 10,
item2Avg: 0,
item3Avg: 12,
item4Avg: 2.5
}
你能告诉与预期结果的有效证件? – styvane
使用$ redact操作。 – ZeMoon
文档模式是不够的。请发布示例有效的JSON文档 – Saleem