1

私のアプリケーションでは、grails と mongoDB を使用して findAndModify を使用する必要があります。私はこのコードを使用しました:

public static String getNextId(DB db, String seq_name) {
String sequence_collection = "seq"; // the name of the sequence collection
String sequence_field = "seq"; // the name of the field which holds the sequence

DBCollection seq = db.getCollection(sequence_collection); // get the collection (this will create it if needed)

// this object represents your "query", its analogous to a WHERE clause in SQL
DBObject query = new BasicDBObject();
query.put("_id", seq_name); // where _id = the input sequence name

// this object represents the "update" or the SET blah=blah in SQL
DBObject change = new BasicDBObject(sequence_field, 1);
DBObject update = new BasicDBObject("$inc", change); // the $inc here is a mongodb command for increment

// Atomically updates the sequence field and returns the value for you
DBObject res = seq.findAndModify(query, new BasicDBObject(), new BasicDBObject(), false, update, true, true);
return res.get(sequence_field).toString();
}

そしてそれはうまくいきます。しかし今は、ネイティブの mongodb オブジェクトを使用せずに、GORM を使用して findAndModify を使用したいと考えています。この作業の解決策はありますか?

4

2 に答える 2

0

db 構成で DataSource.groovy を構成します。

次に、ドメイン クラスを定義します。

Class Seq{

    int seq

}

サービスで動的ファインダーを使用します。

Class SeqService {

    String findAndModify(String seq_name) {
        def seqInstance = Seq.get(seq_name)
        if(seqInstance){
            seqInstance.seq ++
            seqInstance.save()
            return seqInstance.seq.toString()
        }
        return ''      //instance not found
    }
}

次に、そのアクションが必要なときに電話をかけます。

def seqService

def id
.......
def result = seqService.findAndModify(id)
....
于 2012-12-23T16:32:32.610 に答える