如何通过单个命令修改文档中的两个或多个字段

huangapple go评论82阅读模式
英文:

How to modify two or more fields in document by single command

问题

我正在尝试通过Go(使用mgo连接MongoDB)的findAndModify方法向文档中的两个字段添加20个点。

像这样:

change := mgo.Change{
Update: bson.M{"$inc": bson.M{"score": 20, "hist_score": 20}}, // 在这里我需要同时将20添加到score和hist_score字段
ReturnNew: true,
}

collection.Find(bson.M{"_id": id}).Apply(change, &doc)

如何通过一个apply操作更新score和hist_score两个字段?

英文:

I am trying to add 20 points to two fields inside document with findAndModify through Go (mgo for mongo)

like

change := mgo.Change{
        Update: bson.M{ "$inc": bson.M{ "score": 20 } },   // here I need  to add 20 to hist_score also
        ReturnNew: true,
}



collection.Find( bson.M{ "_id": id } ).Apply( change, &doc )

How to through one apply update two fields score and hist_score ?

答案1

得分: 3

官方的MongoDB文档非常好。你可以使用$inc来更新多个字段,具体的用法如下:

{ $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } }

另外,

若要指定嵌入文档或数组中的字段,请使用点表示法。

所以,基本上,你可以将更新规范修改为以下形式:

bson.M{ "$inc": bson.M{ "score": 20, "hist_score": 10 } }
英文:

The official mongo documentation is very good. The way you use $inc for several fields is:

{ $inc: { &lt;field1&gt;: &lt;amount1&gt;, &lt;field2&gt;: &lt;amount2&gt;, ... } }

And

> To specify a field in an embedded document or in an array, use dot notation.

So, basically, change your update spec to something like:

bson.M{ &quot;$inc&quot;: bson.M{ &quot;score&quot;: 20, &quot;hist_score&quot;: 10 } }

huangapple
  • 本文由 发表于 2015年5月21日 21:42:11
  • 转载请务必保留本文链接:https://go.coder-hub.com/30375504.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定