gpt4 book ai didi

java - MongoDb - 如果集合不存在,则自动更新集合

转载 作者:行者123 更新时间:2023-12-01 23:15:30 26 4
gpt4 key购买 nike

我的 Collection 中有以下文档:

{
"_id":NumberLong(106379),
"_class":"x.y.z.SomeObject",
"name":"Some Name",
"information":{
"hotelId":NumberLong(106379),
"names":[
{
"localeStr":"en_US",
"name":"some Other Name"
}
],
"address":{
"address1":"5405 Google Avenue",
"city":"Mountain View",
"cityIdInCitiesCodes":"123456",
"stateId":"CA",
"countryId":"US",
"zipCode":"12345"
},
"descriptions":[
{
"localeStr":"en_US",
"description": "Some Description"
}
],
},
"providers":[

],
"some other set":{
"a":"bla bla bla",
"b":"bla,bla bla",
}
"another Property":"fdfdfdfdfdf"
}

我需要遍历集合中的所有文档,如果 "providers": [] 为空,我需要根据信息部分的值创建新的集合。

我还远不是 MongoDB 专家,所以我有几个问题:

  • 我可以将其作为原子操作来完成吗?
  • 我可以使用 MongoDB 控制台执行此操作吗?据我了解,我可以使用 $addToSet$each 命令来做到这一点?
  • 如果没有,是否有任何基于 Java 的驱动程序可以提供此类功能?

最佳答案

Can I do it as atomic operation?

每个文档都将以原子方式更新。 MongoDB 中不存在 RDBMS 意义上的“原子”,这意味着所有操作都会成功或失败,但您可以使用 $isolated operator 阻止其他写入交错。

Can I do this using MongoDB console?

当然可以。要查找所有空的提供程序数组,您可以发出如下命令:

db.zz.find(providers:{ $size: 0}})

要使用一组固定的字符串更新数组长度为零的所有文档,您可以发出如下查询

db.zz.update({providers: { $size: 0}}, {$addToSet: {providers: "zz"}})

如果您想根据文档的数据向文档添加一部分,您可以使用臭名昭著的 $where query请注意该链接中出现的警告,或者 - 正如您所提到的 - 查询空提供程序数组,并使用 cursor.forEach()

If not is there any Java based driver that can provide such functionality?

当然,您有一个 Java 驱动程序,就像其他每种主要编程语言一样。它实际上可以完成所描述的所有操作,以及基本上您可以从 shell 执行的所有操作。建议您从the Java Language Center开始.

还有几个框架可以促进 MongoDB 的使用并连接对象-文档世界。我不会在这里给出任何信息,因为我很有偏见,但我确信快速的 Google 搜索就可以做到。

关于java - MongoDb - 如果集合不存在,则自动更新集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21279306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com