英文:
Update documents without loop in MongoDB with Golang
问题
我有一个收集器模块,每30秒从远程API获取数据。这给我提供了一个对象列表,我将其插入或更新到MongoDB数据库中。
{
"id" : "oulkhhvoiupokb",
"name" : "test1",
"status" : "OPEN"
},
{
"id" : "oulkhhvoisksbsjkkb",
"name" : "test2",
"status" : "CLOSED"
}
实际上,我只收集具有"OPEN"状态的对象。然后通过循环,将其余的对象设置为"CLOSED"(因为它们不是"OPEN")。
但是在将来,由于对象的数量将增加,这将需要很长时间。
我使用Golang和MGO包进行开发。
有没有一种更快、更简洁的方法呢?类似于为Mongo文档设置基本字段值的方式?
换句话说,当我将"OPEN"对象插入数据库时,已经存在于数据库中的所有其他对象必须被设置为"CLOSED"。MongoDB能做到吗?
谢谢。
英文:
I have a collector module that pulls a remote API every 30 seconds.
That gives me a list of objects that I insert or update in a MongoDB database.
{
"id" : "oulkhhvoiupokb",
"name" : "test1",
"status" : "OPEN"
},
{
"id" : "oulkhhvoisksbsjkkb",
"name" : "test2",
"status" : "CLOSED"
}
In fact, I only collect the objects that have the OPEN status. And with a loop, I set the rest of the object as CLOSED (because they are not OPEN).
But in the future, it will take a lot of time because the amont of object will grow.
I work with Golang and MGO package.
Is there a way to do it faster and cleaner please ? Something like setting a basic field value for Mongo documents ?
To explain it differently, when I will insert the OPEN objects in the database, all the other ones that are already in database must be CLOSED. Can Mongo do it ?
Thanks.
答案1
得分: 0
解决方案是使用func (c *Collection) UpdateAll(selector interface{}, update interface{}) (info *ChangeInfo, err error)
,其中选择器使用$nin
,更新部分使用$set
。
英文:
Solution was to use func (c *Collection) UpdateAll(selector interface{}, update interface{}) (info *ChangeInfo, err error)
with the $nin
for the selector and $set
for the update.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论