【发布时间】:2020-06-03 11:17:20
【问题描述】:
我在 MongoDB 中有一个具有以下结构的集合:
{
"userId": String,
"refs": Set<String>
}
我需要使用这些文档更新集合。我想为过滤器$in 中的用户添加一个新字符串到refs。
但是,如果用户不存在,我需要“更新”他。
在代码(golang)中是这样的:
filter := bson.M{
"userId": bson.M{
"$in:": tokens // tokens is []string
}
}
update := bson.M{
"$addToSet": bson.M{
"refs": newReference
}
}
ctx, _ := newDbOperationContext()
_, err := driver.UpdateMany(ctx, filter, update)
因此,对于现有用户来说,它工作正常,添加了参考。但是,对于不存在的用户,什么都不会发生。
我在driver.UpdateMany(bson, bson, opts...) 中设置了options.UpdateOptions.SetUpsert(true)",但结果我得到了一个没有userId 的文档:
{
"_id": ObjectId("..."),
"refs": ["new_reference"]
}
所以,我的问题是,如何使用 userId 字段插入新值。
规模就像 2*10^6 用户更新,所以我想使用批处理请求来做到这一点。我认为,使用“一个一个”创建并更新他不是一个选项。
感谢您的支持!
【问题讨论】: