Upserting' rows' MongoDB的

时间:2015-08-04 08:40:27

标签: c++ arrays mongodb collections bson

我有一个生成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天插入到集合中,不用说这不是我想要的。有谁想?

0 个答案:

没有答案