16

我有一个带有 _id 字段的集合作为字符串类型的 IP。

我正在使用猫鼬,但这是控制台上的错误:

$ db.servers.remove()

$ db.servers.insert({"_id":"1.2.3.4"})

$ db.servers.insert({"_id":"1.2.3.5"}) <-- 抛出 dup key: { : null }

4

2 回答 2

35

可能是因为您有一个索引,该索引需要字段之一的唯一值,如下所示:

> db.servers.remove()
> db.servers.ensureIndex({"name": 1}, { unique: 1})
> db.servers.insert({"_id": "1.2.3"})
> db.servers.insert({"_id": "1.2.4"})
E11000 duplicate key error index: test.servers.$name_1  dup key: { : null }

您可以getIndexes()在集合上查看您的索引:

> db.servers.getIndexes()
[
    {
        "v" : 1,
        "key" : {
                "_id" : 1
        },
        "ns" : "test.servers",
        "name" : "_id_"
    },
    {
        "v" : 1,
        "key" : {
                "name" : 1
        },
        "unique" : true,
        "ns" : "test.servers",
        "name" : "name_1"
    }
]
于 2013-06-14T19:17:49.583 回答
7

我今天被完全相同的错误弄糊涂了,后来想通了。这是因为我从 mongoose 模式中删除了一个索引属性,但没有从 mongodb 索引中删除该属性。错误消息实际上是新文档具有值为 null 的索引属性(不在 json 中)。

于 2013-11-26T19:38:24.530 回答