0

我有一个查询:

db.Sets.update({_id: "NxQRkA9hJ6rbjhoEN", "cards.set":"Theros"}, {"$set":{"cards.$.set_code": "THS"}});

我的数据集是这样的:

{
"name" : "THS",
"cards" : [
    {
        "name" : "Omenspeaker",
        "set" : "Theros",
        "set_code" : "THS",
        "id" : "370735"
    },
    {
        "name" : "Sedge Scorpion",
        "set" : "Theros",
        "set_code" : "THS",
        "id" : "370765"
    },
    ]
}

这是一组稍微完整的数据,从 mongo 命令行复制和粘贴:http: //pastebin.com/ix5QaQP3

我收到这样的错误:

LEFT_SUBFIELD only supports Object: cards.0. not: 2

我在这方面读了一大堆,并为此苦苦挣扎了 40 分钟,然后放弃了,只是编写了一个脚本来更新我的数据。我仍然想知道为什么它不起作用,以及我应该怎么做。

4

1 回答 1

0

从数据集中删除具有空键的键值对。

MongoDBLEFT_SUBFIELD only supports Object:在正在更新的子文档中遇到空键时会引发错误。

您的示例数据很好,但您的 pastebin 数据不同。"":""您的每个子文档中都有一个空键值对 ( )。

从您的 pastebin 数据:

{
    "name" : "THS",
    "cards" : [
            {
                    "name" : "Abhorrent Overlord",
                    ...
                    "legality_Peasant" : "",
                    "legality_Pauper" : "",
                    "" : "" <------ this line causes the issue
            },
            ...
于 2013-10-25T01:38:07.973 回答