如何添加到阵列和更新' max'一个陈述中的价值

时间:2017-07-28 16:35:01

标签: mongodb mongodb-query

实施例

//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}} ??
);

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恰恰相反。

虽然它们都与“聚合管道”中使用的运算符共享相同的命名,但它们实际上具有完全不同的功能。在这种情况下,这就是您正在寻找的功能。