0

MongoDB と MongoJack はまったくの初心者です。

私はこのコレクションを持っていますpbf

{
            "_id" : ObjectId("541ea72044ae1b4043e9ccba"),
            "name" : "First civ game",
            "type" : "WAW",
            "numOfPlayers" : 4,
            "active" : true,
            "players" : [ ],
            "civs" : [
                    {
                            "objectType" : "civ",
                            "name" : "Indians",
                            "used" : false,
                            "hidden" : true
                    },
                    {
                            "objectType" : "civ",
                            "name" : "Arabs",
                            "used" : false,
                            "hidden" : true
                    },
                    {
                            "objectType" : "civ",
                            "name" : "Japanese",
                            "used" : false,
                            "hidden" : true
                    },
                    {
                            "objectType" : "civ",
                            "name" : "Egyptians",
                            "used" : false,
                            "hidden" : true
                    },
}

やりたいこと 「IDごとに1つのcivsアイテムを削除して戻す」

私はこのようなことを試しました:

    protected static JacksonDBCollection<PBF, String> pbfCollection;

    BasicDBObject field = new BasicDBObject();
    field.put("civs", 1); 
    field.put("_id", "541ea72044ae1b4043e9ccba");
    PBF pbf = pbfCollection.findAndRemove(field)

しかし、これは何も見つからないという例外をスローするだけです

だから基本的にこれは返してほしい

                    {
                            "objectType" : "civ",
                            "name" : "Indians",
                            "used" : false,
                            "hidden" : true
                    }

どうすればこれを達成できますか?

4

1 に答える 1

0

私は2つのステップを使用してそれを解決しました。それを行うより良い方法があると確信しています。

//First get, then remove, then update

PBF pbf = pbfCollection.findOneById(pbfId);
Civ civ = pbf.getCivs().remove(0);
pbfCollection.updateById(pbf.getId(), pbf);

これはうまくいきましたが、それを行うためのより良い方法であるべきだと思います

于 2014-09-21T13:24:13.750 に答える