我是mongodb的新手。我有一个对象,看起来像这样
{
"_id" : 1,
"name" : "Alex",
"quantity" : 10,
"lastActivityTime" : ISODate("2022-09-01T03:38:29Z"),
"lastRefreshTime" : ISODate("2022-10-01T20:54:19.618Z"),
"checking": [1, 2, 3],
}
我想更新此文档,但有以下条件:
1.如果lastActivityTime
在deadline
之前,则增加quantity
。
1.否则,请保持quantity
不变。
在这两种情况下,我还需要删除checking
字段中的值(例如3),并将lastActivityTime
更新为当前时间。
这是我目前的代码。它的工作,但它需要运行updateOne()
两次。有没有更有效的方法?
r, err := s.collection.UpdateOne(ctx,
bson.M{
"_id": 1,
"lastActivityTime": bson.M{"$not": bson.M{"$gte": deadline}}},
bson.M{
"$set": bson.M{
"lastActivityTime": time.Now(),
},
"$inc": bson.M{
"quantity": 1,
},
"$pull": bson.M{
"checking": 3,
},
},
)
if r.MatchedCount == 0 {
r, err = s.accountTokenCollection.UpdateOne(ctx,
bson.M{
"_id": 1,
"lastActivityTime": bson.M{"$gte": deadline}},
bson.M{
"$set": bson.M{
"lastRefreshedTime": time.Now(),
},
"$pull": bson.M{
"checking": 3,
},
},
)
1条答案
按热度按时间6rqinv9w1#
我不知道Go语言的等价形式,但是可以使用文档更新的流水线形式,如下所示:
这是Playground。