Mongodb-在重复记录上追加
我正试图使用mongodb在Java中完成这项任务。假设我有一份员工名单(名字、姓氏、电话号码)。现在,一些员工可以有多个电话号码 假设我有一个员工列表(我正在解析一个xml文档): 我尝试的是首先解析文档并插入firstname和lastname。然后,查询firstname和lastname(如果存在),使用$push追加电话号码来更新记录:Mongodb-在重复记录上追加,mongodb,mongo-java,Mongodb,Mongo Java,我正试图使用mongodb在Java中完成这项任务。假设我有一份员工名单(名字、姓氏、电话号码)。现在,一些员工可以有多个电话号码 假设我有一个员工列表(我正在解析一个xml文档): 我尝试的是首先解析文档并插入firstname和lastname。然后,查询firstname和lastname(如果存在),使用$push追加电话号码来更新记录: File fXmlFile = new File("contacts.xml"); DocumentBuilderFactory dbFactory
File fXmlFile = new File("contacts.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
Document doc;
try {
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("testdb");
dBuilder = dbFactory.newDocumentBuilder();
DBCollection table = db.getCollection("employees");
doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("contact");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
BasicDBObject document = new BasicDBObject();
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
String firstName = eElement.getElementsByTagName("name").item(0).getTextContent();
String lastName =eElement.getElementsByTagName("lastName").item(0).getTextContent();
document.put("name", firstName);
document.put("lastName", lastName);
table.insert(document);
String phoneNumber = eElement.getElementsByTagName("phone").item(0).getTextContent();
BasicDBObject query = new BasicDBObject();
query.put("name", firstName);
query.put("lastName", lastName);
BasicDBObject push = new BasicDBObject();
push.put("$push", new BasicDBObject("phone",phoneNumber));
table.update(query, push);
}
所以基本上,有一张约翰·史密斯的唱片,没有添加电话号码,为什么?为什么我的前两条记录显示为lastname first
我是mongodb的新手,所以这是一段非常草率和快速的代码,只是为了看看如何完成这项任务
我将非常感谢任何帮助
谢谢。Mongodb的概念是(如果不存在则插入,如果存在则更新) 尝试使用:将upsert标志设置为true 大概是这样的:
{ "_id" : ObjectId("5297a3d84a9cb457a3f33b23"), "name" : "John", "lastName" : "Smith", "phone" : [ "555 123 23 23", "555 666 66 66 23" ] }
{ "_id" : ObjectId("5297a3d84a9cb457a3f33b24"), "name" : "Jane", "lastName" : "Doe", "phone" : [ "555 123 44 44" ] }
收藏。更新(新BasicDBObject(“姓名”、“约翰”)。追加(“姓氏”、“史密斯”)、新BasicDBObject(“推送”)、新BasicDBObject(“电话”、“新号码”)、真、假)哇,我的生活不必要地复杂化了。我知道upsert命令,但只是不知道如何正确地执行:-)谢谢你,它工作起来很有魅力!
File fXmlFile = new File("contacts.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
Document doc;
try {
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("testdb");
dBuilder = dbFactory.newDocumentBuilder();
DBCollection table = db.getCollection("employees");
doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("contact");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
BasicDBObject document = new BasicDBObject();
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
String firstName = eElement.getElementsByTagName("name").item(0).getTextContent();
String lastName =eElement.getElementsByTagName("lastName").item(0).getTextContent();
document.put("name", firstName);
document.put("lastName", lastName);
table.insert(document);
String phoneNumber = eElement.getElementsByTagName("phone").item(0).getTextContent();
BasicDBObject query = new BasicDBObject();
query.put("name", firstName);
query.put("lastName", lastName);
BasicDBObject push = new BasicDBObject();
push.put("$push", new BasicDBObject("phone",phoneNumber));
table.update(query, push);
}
{ "_id" : ObjectId("5297a5004a9ca519fad4e94d"), "lastName" : "Smith", "name" : "John", "phone" : [ "555 123 23 23"
, "555 666 66 66 23" ] }
{ "_id" : ObjectId("5297a5004a9ca519fad4e94e"), "lastName" : "Doe", "name" : "Jane", "phone" : [ "555 123 44 44" ]
}
{ "_id" : ObjectId("5297a5004a9ca519fad4e94f"), "name" : "John", "lastName" : "Smith" }