使用Java

时间:2016-05-12 13:04:58

标签: java mongodb

我正在从现有的集合中创建新的集合。 在此代码中,关键字将存储在文件列表中。

        BufferedReader keyword = new BufferedReader(new FileReader("Leave.txt"));

        String str;
        List<String> list = new ArrayList<String>();
        while((str = keyword.readLine()) != null)
        {
            list.add(str);
        }

        String[] psentiments = list.toArray(new String[0]);

在这里,我正在检查我的收集天气,任何状态都有特定字。如果它找到,那么它将插入到新的集合中。它工作得很好,但如果它与不同关键字的相同状态进行比较,则会引发错误。    插入代码:

            MongoCursor<Document> cursor = collection1.find().iterator();
           try {
               while (cursor.hasNext()) {
                   Document dr = cursor.next();
                   String stat =  dr.getString("status");
                    for(String i:psentiments){
                        if(stat.contains(i)){
                            //System.out.println( stat+"-->"+i+ counter);
                            createcollection(dr,collection1, new ObjectId(dr.get("_id").toString()),newcoll);
                            counter++;
                        }

                    }
               }

           } finally {
               cursor.close();
           }
}

private static void createcollection(Document dr, MongoCollection<Document> collection1, ObjectId objectId, MongoCollection<Document> newcoll) {

//我在这里需要帮助..插入文件没有重复

    newcoll.insertOne(dr);


}

结果:

线程中的异常&#34; main&#34; com.mongodb.MongoWriteException:E11000重复键错误集合:Brexit.Leave索引: id dup key:{:ObjectId(&#39; 573334f5fbfb8711f0c7ac44&#39;)}     在com.mongodb.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:523)     在com.mongodb.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:306)     在com.mongodb.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:297)     在twitter.sample.createcollection(sample.java:66)     在twitter.sample.main(sample.java:52)

最后两个状态具有相同的密钥。我不知道如何插入而不重复,也只应插入一个状态。 在此先感谢!!!

1 个答案:

答案 0 :(得分:0)

你应该使用save()方法。

  

save() - 根据参数更新现有文档或插入文档。