实施例
//Entry 1 (value 7)
{
stuff : "goods"
values : [7],
max : 7,
}
//Entry 2 (value : 3)
{
stuff : "goods"
values : [7, 3],
max : 7,
}
//Entry 3 (value : 9)
{
stuff : "goods"
values : [7, 3, 9],
max : 9,
}
我尝试过的事情
db.people.aggregate(
{$match:{stuff:"goods"}},
{$unwind:"$values"},
{$max:1}
//lost ? {$set : {max : 1}} ??
);
答案 0 :(得分:1)
.aggregate()
方法仅“查询”数据,并且实际上并未在数据库中永久“修改”文档。因此,您仍然希望.update()
实际进行更改,并且您阅读了$max
的错误文档,这是一个实际应用于“更新”的“不同”运算符:
所以对于每次迭代:
db.people.drop();
db.people.update(
{ "stuff": "goods" },
{
"$push": { "values": 7 },
"$max": { "max": 7 }
},
{ "upsert": true }
);
// { "stuff": "goods", "values": [7], "max": 7 }
db.people.update(
{ "stuff": "goods" },
{
"$push": { "values": 3 },
"$max": { "max": 3 }
},
{ "upsert": true }
);
// { "stuff": "goods", "values": [7,3], "max": 7 }
db.people.update(
{ "stuff": "goods" },
{
"$push": { "values": 9 },
"$max": { "max": 9 }
},
{ "upsert": true }
);
// { "stuff": "goods", "values": [7,3,9], "max": 9 }
所以$max
的“那个”版本只在文档中“修改”时提供的值大于“大于”现有属性的当前值。当然$min
恰恰相反。
虽然它们都与“聚合管道”中使用的运算符共享相同的命名,但它们实际上具有完全不同的功能。在这种情况下,这就是您正在寻找的功能。