mongo-go-driver 的更新函数可以这样调用。
filter := bson.D{"username", username}
update := bson.D{{"$set",
bson.D{
{"name", person.Name},
},
}}
result, err := collection.UpdateOne(ctx, filter, update)
Run Code Online (Sandbox Code Playgroud)
type Person struct {
ID primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty"`
Username string `json:"username,omitempty" bson:"username,omitempty"`
Name string `json:"name,omitempty" bson:"name,omitempty"`
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要使用person
结构调用更新函数,而没有像这样提及 person 结构的每个字段。
filter := bson.D{"username", username}
update := bson.D{{"$set", <<how to convert person struct to bson document?>>}}
result, err := collection.UpdateOne(ctx, filter, update)
Run Code Online (Sandbox Code Playgroud)
如何将 person 结构转换为 bson 文档?
我有两个 AsyncSelect 组件来选择一个类别和一个子类别。当我们从第一个 AsyncSelect 中选择一个类别时,我需要将其子类别加载到第二个 AsyncSelect 中。
AsyncSelect 在安装时加载项目。但是,当数据已经安装时,如何以编程方式触发它(当我从第一个 AsyncSelect 中选择类别时)来加载数据(第二个 AsyncSelect 的子类别)?
<AsyncSelect
cacheOptions
loadOptions={this.loadSubCategories}
defaultOptions
onInputChange={this.handleInputChange}
/>
Run Code Online (Sandbox Code Playgroud) 所以如果 Event Dispatch Thread 是一个独立于主线程的线程,那让我觉得下一个代码会输出
Before
Runnable
true
After
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,就好像 EDT 在运行invokeLater(..)
方法内的代码块之前等待主线程完成。输出是:
Before
After
Runnable
true
Run Code Online (Sandbox Code Playgroud)
编码:
Before
Runnable
true
After
Run Code Online (Sandbox Code Playgroud)
但是,如果我替换invokeLater(..)
为invokeAndWait(..)
,那么我得到
Before
Runnable
true
After
Run Code Online (Sandbox Code Playgroud)
这让我觉得 EDT 并不是一个真正的独立线程,或者至少在这个例子中它的行为或只是在我看来不是。你怎么解释这个?