如何使用MongoDB Java异步驱动程序在插入到MongoDB集合后获取_id
感谢您的提前帮助!
Abhilash :)
package test;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.allanbank.mongodb.MongoClient;
import com.allanbank.mongodb.MongoClientConfiguration;
import com.allanbank.mongodb.MongoCollection;
import com.allanbank.mongodb.MongoDatabase;
import com.allanbank.mongodb.MongoFactory;
import com.allanbank.mongodb.bson.Document;
import com.allanbank.mongodb.bson.builder.BuilderFactory;
import com.allanbank.mongodb.bson.builder.DocumentBuilder;
import com.allanbank.mongodb.builder.Aggregate;
import com.xxxx.dto.FeedMongoDTO;
/**
* @author abhi
*
*/
public class MongoTestService {
public static transient Log log = LogFactory.getLog(FeedMongoOperations.class);
private MongoClient mongo;
private MongoDatabase db;
private MongoCollection collection;
public boolean openDbConnection() {
try {
MongoClientConfiguration config = new MongoClientConfiguration();
config.addServer("localhost:27017");
config.setMaxConnectionCount(10);
mongo = MongoFactory.createClient(config);
db = mongo.getDatabase("feedDatabase");
return true;
} catch (Exception e) {
return false;
}
}
public boolean closeDbConnection() {
try {
mongo.close();
return true;
} catch (Exception e) {
return false;
}
}
public String save(FeedMongoDTO feed, String collectionName) {
try {
collection = db.getCollection(collectionName);
DocumentBuilder b = BuilderFactory.start();
Document d1 = b.add("url", feed.getUrl()).addLong("mongoTimeStamp", feed.getMongoTimestamp())
.add("feedJsonArray", feed.getFeedJsonArray()).build();
collection.insert(d1);
return d1.get("id").toString();
} catch (Exception ex) {
return null;
}
}
public FeedMongoDTO getFeed(String mongoId, String collectionName) {
FeedMongoDTO feedMongoDTO = null;
try {
return feedMongoDTO;
} catch (Exception ex) {
return null;
}
}
}
其中FeedMongoDTO
的结构如下所示:
public class FeedMongoDTO {
private String id;
private String url;
private Long mongoTimeStamp;
private JSONArray feedJsonArray;
// Getters
public String getId() {
return id;
}
public String getUrl() {
return url;
}
public Long getMongoTimestamp() {
return mongoTimeStamp;
}
public JSONArray getFeedJsonArray() {
return feedJsonArray;
}
// Setters
public void setId(String id) {
this.id = id;
}
public void setUrl(String url) {
this.url = url;
}
public void setMongoTimestamp(Long mongoTimestamp) {
this.mongoTimeStamp = mongoTimestamp;
}
public void setFeedJsonArray(JSONArray feedJsonArray) {
this.feedJsonArray = feedJsonArray;
}
}
我需要获取_id的值,但是这里d1.get("id").toString()
会导致NullPointerException
还有一件事,我很困惑是否我正确地使用了Save()方法。使用通常的mongodb驱动程序更容易。
public String save(FeedMongoDTO feed, String collectionName) {
try {
mongoTemplate.save(feed, collectionName);
return feed.getId();
} catch (Exception ex) {
return null;
}
}
感谢您的提前帮助!
Abhilash :)
MongoCollection
类型中的insert(Durability, DocumentAssignable...)
方法不适用于参数(Document, Durability)
。请更改为insertAsync()
。而当我按照他们所说的做时,我得到了:MongoCollection
类型中的insertAsync(Durability, DocumentAssignable...)
方法不适用于参数(Document, Durability)
。请更改为insert()
。 - Abhilash PScollection.insert(d1, Durability.ACK);
。 - Ori DarSystem.out.println(d1.get("_id").getValueAsString());
给出的结果是ObjectId('5150c3da57199014e86bedc6')
。 - Abhilash PS