即使元素是对象,Mongodb也会出现LEFT_SUBFIELD错误

时间:2013-10-09 06:15:39

标签: mongodb

我有查询:

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分钟而只是写了一个脚本来更新我的数据。我仍然想知道为什么它不起作用,以及我应该怎么做。

1 个答案:

答案 0 :(得分:0)

使用数据集中的键删除键值对。

当MongoDB遇到正在更新的子文档中的空键时,会抛出LEFT_SUBFIELD only supports Object:错误。

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

从您的pastebin数据:

{
    "name" : "THS",
    "cards" : [
            {
                    "name" : "Abhorrent Overlord",
                    ...
                    "legality_Peasant" : "",
                    "legality_Pauper" : "",
                    "" : "" <------ this line causes the issue
            },
            ...