尝试从JSON文件插入数据时出现此错误。只有一个项目被添加到数据库中。
11000 E11000 duplicate key error index: awdb.mycollection.$_id_ dup
> key: { : ObjectId('53954d897aadbe032a33cd68') }
> > db.mycollection.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "awdb.mycollection"
},
{
"v" : 1,
"unique" : true,
"key" : {
"UDID" : 1
},
"name" : "UDID_1",
"ns" : "awdb.mycollection",
"sparse" : true
}
]
>
以下是我正在使用的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);
}
这是我的创建功能
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;
}
答案 0 :(得分:1)
你需要这样做:
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;
}
...
}
答案 1 :(得分:0)
问题在于,正如@NeilLunn指出的那样,每次插入行时我都没有创建新的BasicDBObject
。这意味着,它试图插入一个具有相同ObjectId
的行,只更改了其余的值。这导致了上述错误。