Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java mongo db驱动程序使用MongoDB插入时出现重复密钥错误_Java_Mongodb_Mongodb Java - Fatal编程技术网

使用java mongo db驱动程序使用MongoDB插入时出现重复密钥错误

使用java mongo db驱动程序使用MongoDB插入时出现重复密钥错误,java,mongodb,mongodb-java,Java,Mongodb,Mongodb Java,我在尝试从JSON文件插入数据时遇到此错误。只有一项被添加到数据库中 下面是我正在使用的JSON输入文件 {"UDID":"1234","FriendlyName":"Ben Android","sn":"abc123","ManDate":"12/12/8234"} {"UDID":"1235","FriendlyName":"Android","sn":"abc23","ManDate":"12/12/1254"} {"UDID":"1236","FriendlyName":"Ben d

我在尝试从JSON文件插入数据时遇到此错误。只有一项被添加到数据库中

下面是我正在使用的JSON输入文件

{"UDID":"1234","FriendlyName":"Ben Android","sn":"abc123","ManDate":"12/12/8234"}
{"UDID":"1235","FriendlyName":"Android","sn":"abc23","ManDate":"12/12/1254"}
{"UDID":"1236","FriendlyName":"Ben droid","sn":"abc12","ManDate":"12/12/1734"}
下面是我用来插入JSON的代码

while ((sCurrentLine = br.readLine()) != null) {
d=g.fromJson(sCurrentLine, Device.class);
m.create(d);
}
这是我的create函数

public boolean create(Device d) {
        document.put("UDID",d.UDID);
        document.put("name", d.FriendlyName);
        document.put("Serial", d.sn);
        document.put("Manf", d.ManDate);
        collection.insert(document);
        return true;
    }
还有我的设备类

    public class Device {

public  String UDID;
public  String FriendlyName;
public  String sn;
public  String ManDate;
    }

问题是,正如@NeilLunn所指出的,我并不是每次插入一行时都创建一个新的
BasicDBObject
。这意味着,它试图插入一个具有相同
ObjectId
的行,但只更改了其余的值。这导致了上述错误。

您需要执行以下操作:

public boolean create(Device d) {
        BasicDBObject document = new BasicDBObject();
        document.put("UDID",d.UDID);
        document.put("name", d.FriendlyName);
        document.put("Serial", d.sn);
        document.put("Manf", d.ManDate);
        collection.insert(document);
        return true;
}
然后,您将创建一个新对象以插入到集合中。希望这有帮助

编辑:在代码中使用getter和setter也是一种很好的做法,如下所示:

        public class Device {

        private  String UDID;
        private  String FriendlyName;
        private  String sn;
        private  String ManDate;

    public String getUDID(){
    return this.UDID;
    }
    public String getFriendlyName(){
    return this.FriendlyName;
    }
    public void setUDID(String UDID){
    return UDID = this.UDID;
    }
    public String setManDate(String ManDate){
    return ManDate = this.ManDate;
    }

...

    }

\u id
值是主键,不允许重复。您的JSON似乎至少两次提到了相同的值。您需要消除JSON的重复或以其他方式解决问题我已经用我的输入JSON更新了问题。我相信我们在这里看不到任何代码来确定任何不同。目前没有足够的信息供其他人解决您的问题。例如,
document
在哪里被实例化?每个循环是否有一个新实例?或者它是在循环之外创建的,而您只是在替换这些值?看到这里可能出现的问题了吗?很可能它似乎包含一个未被覆盖的单数
\u id
值。默认情况下在客户端上生成的。但我要说的是,这里没有相关的代码,任何人都可以肯定地告诉你。这显然是由于产生了错误。如果我们能看到代码,就更清楚了。
public boolean create(Device d) {
        BasicDBObject document = new BasicDBObject();
        document.put("UDID",d.UDID);
        document.put("name", d.FriendlyName);
        document.put("Serial", d.sn);
        document.put("Manf", d.ManDate);
        collection.insert(document);
        return true;
}
        public class Device {

        private  String UDID;
        private  String FriendlyName;
        private  String sn;
        private  String ManDate;

    public String getUDID(){
    return this.UDID;
    }
    public String getFriendlyName(){
    return this.FriendlyName;
    }
    public void setUDID(String UDID){
    return UDID = this.UDID;
    }
    public String setManDate(String ManDate){
    return ManDate = this.ManDate;
    }

...

    }