我有一个包含以下文档的集合:
{ID: xxx, firstCreateDate: xxx, isActive: false}
Run Code Online (Sandbox Code Playgroud)
isActive = false,然后更新isActive为 true,如果之前未设置,也更新firstCreateDate为当前日期。我不确定如何有条件地更新提交的firstCreateDate。目前无法进行有条件更新。得到
firstCreateDate = {$cond:[{"firstCreateDate":{"$exists":false}}, "$firstCreateDate", newdata]}ID字段生成新字段internalID。我尝试使用UpdateMany(),但似乎无法使用您自己的函数获取该值并计算新值。我正在考虑使用Find()查找所有文档,然后对其进行解码,然后根据id一一更新文档。对此有更好的解决方案吗?这就是我现在所拥有的:
filter := bson.M{"isActive": false}
update := bson.M{"set": bson.M{"isActive": true, "firstCreateDate": bson.M{
"$cond": bson.A{
bson.M{"firstCreateDate", bson.M{"$exists", false}},
"$firstCreateDate",
newDate,
}
}}}
collection.UpdateByID(
context.Background(),
id,
update,
)
Run Code Online (Sandbox Code Playgroud)
我正在使用mongo-driver lib,任何人都可以提供帮助
Sco*_*ott -1
一些东西..
$set采用与投影运算符基本相同的语法。这是 updateMany 将解决您的第一个问题。它使用 mongosh 语法,但您应该能够将逻辑转换为 go。
db.collection.updateMany(
{ isActive: false },
[{$set: {
firstCreateDate: {
$ifNull: [
'$firstCreateDate',
ISODate('2022-03-26T03:52:45.240Z')
]
},
isActive: {
$toBool: true
},
_idExtractDate: {
$convert: {
input: '$_id',
to: 'date'
}
}
}}]
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1769 次 |
| 最近记录: |