英文:
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]]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论