4

mongoDb Java非同期ドライバーを使用してmongoDbコレクションに挿入した後に_idを取得する方法

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

もう 1 つ、Sa​​ve() メソッドを正しく実行しているかどうかについて混乱しています。通常のmongodbドライバーを使用すると、かなり簡単になりました。

public String save(FeedMongoDTO feed, String collectionName) {
    try {
        mongoTemplate.save(feed, collectionName);
        return feed.getId();
    } catch (Exception ex) {
        return null;
    } 
} 

前もって感謝します

アビラッシュ:)

4

3 に答える 3

0

非同期 Java ドライバーは、通常のfindOne呼び出しのように、同期クエリを作成する方法を提供しているように思えます。これはあなたのニーズにとって理にかなっていますか?

于 2013-03-25T20:03:07.233 に答える