我有一个生成JSON对象的远程进程,并将它们发送到存储在MongoDB中的服务器。我想将这些对象存储在'master'集合中我称之为行(来自SQL背景)的内容中,例如:
结果(主要收藏)
Results.Day Results.Day.1.Data Results.2 Results.Day.2.Data 等
我正在使用upsert,因为随着时间的推移,一些结果将由远程进程重新生成,因此需要更新。目前我可以upsert Results.Day.1然而当我尝试upsert Results.Day.2我得到一个错误,说我有一个重复的密钥。
我使用以下查询进行第一次upsert:
{_id:'UUID',Results.Day:{“$ eq”:1}}
和第二次upsert:
{_id:'UUID',Results.Day:{“$ eq”:2}}
甚至可以这样做,如果是这样,我该怎么办呢?我很感激你对此的看法。显然我不是NoSQL的专家,但是由于我的理解有限,似乎我需要插入'行'作为数组,但我怎么做我不知道。
我可以访问客户端和服务器的源代码,因此可以更改完成此操作所需的内容,因此我非常感谢您的帮助。
我用于服务器
Linux上的MongoDB v3.0.4和legacy-0.0-26compat c ++驱动程序。 Windows 7 x64和客户端的相同驱动程序。
编辑:
好的,根据下面的评论和进一步阅读,我发现我根本无法更改_id键。但是,如果我手工制作文档以模仿我在代码中尝试实现的内容,我可以将其加载到数据库中而不会出现错误:
{
"_id": "aebc483c-5832-45ac-8a43-16b2c591b520",
"Results":
{
"Day":
{
"19":
{
"Data":
{
Blah
}
},
"201":
{
"Data":
{
More Blah
}
}
}
}
}
但是当我用up ::
进行upsert时{
"_id": "aebc483c-5832-45ac-8a43-16b2c591b520",
"Results":
{
"Day":
{
"20":
{
"Data":
{
Blah
}
}
}
}
}
它取代了我在数据库中已有的内容,而不是将第20天插入到集合中,不用说这不是我想要的。有谁想?