在Golang中使用MongoDB减去两个字段的值。

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

Substract two fields in mongodb with Golang

问题

我遇到了一个问题,想要从我的MongoDB数据库中减去两个字段,并将它们返回到一个变量中。

我正在使用bson.M在golang中执行操作,但没有成功。

col2 := db.Collection("products")

pipe2 := []bson.M{
	{"$group": bson.M{
		"_id":   IDUser,
		"total": bson.M{"$subtract": {"$actualPrice", "$oldPrice"}},
	}},
}

cur2, err := col2.Aggregate(ctx, pipe2)
英文:

I run into the problem of wanting to subtract 2 fields from my mongodb database and return them in a variable.

I am using bson.M to perform the operation in golang without any success.

	col2 := db.Collection("products")

pipe2 := []bson.M{
	{"$group": bson.M{
		"_id":   IDUser,
		"total": bson.M{"$subtract": {"$actualPrice", "$oldPrice"}},
	}},
}

cur2, err := col2.Aggregate(ctx, pipe2)

答案1

得分: 1

$subtract 运算符需要一个数组(在 Go 中可以是一个切片)。

要向输出文档添加一个字段,请使用 $addFields 阶段:

pipe2 := []bson.M{
    {"$addFields": bson.M{
        "total": bson.M{"$subtract": []string{"$actualPrice", "$oldPrice"}},
    }},
}

使用以下文档进行测试:

{ "_id" : "u1", "actualPrice" : 100, "oldPrice" : 80 }
{ "_id" : "u2", "actualPrice" : 200, "oldPrice" : 190 }

测试代码:

cur2, err := col2.Aggregate(ctx, pipe2)
if err != nil {
    panic(err)
}

var results []bson.M
if err = cur2.All(ctx, &results); err != nil {
    panic(err)
}

fmt.Println(results)

输出结果:

[map[_id:u1 actualPrice:100 oldPrice:80 total:20] 
 map[_id:u2 actualPrice:200 oldPrice:190 total:10]]
英文:

The $subtract operator requires an array (which may be a slice in Go).

And to add a field to the output document, use the $addFields stage:

pipe2 := []bson.M{
	{"$addFields": bson.M{
		"total": bson.M{"$subtract": []string{"$actualPrice", "$oldPrice"}},
	}},
}

Testing it with the following documents:

{ "_id" : "u1", "actualPrice" : 100, "oldPrice" : 80 }
{ "_id" : "u2", "actualPrice" : 200, "oldPrice" : 190 }

Testing code:

cur2, err := col2.Aggregate(ctx, pipe2)
if err != nil {
	panic(err)
}

var results []bson.M
if err = cur2.All(ctx, &results); err != nil {
	panic(err)
}

fmt.Println(results)

Output:

[map[_id:u1 actualPrice:100 oldPrice:80 total:20] 
 map[_id:u2 actualPrice:200 oldPrice:190 total:10]]

huangapple
  • 本文由 发表于 2022年4月15日 23:36:33
  • 转载请务必保留本文链接:https://go.coder-hub.com/71886001.html
匿名

发表评论

匿名网友

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

确定