sql >> データベース >  >> NoSQL >> MongoDB

春のデータmongodbマッピング動的フィールド

    私は完璧な解決策を見つけました。私のプロジェクトを例にとってみましょう:

    @Data
    @Document(collection = "logs")
    public class Log {
        @Id
        private String id;
        private Object data;
    
        // data field can be a string
        public void setData(String str) {
            data = str;
        }
        // data field can be a {}
        public void setData(JsonObject jsonObject) {
            data = new BasicDBObject(jsonObject.getMap());
        }
        // data can be a []
        public void setData(JsonArray jsonArray) {
            BasicDBList list = new BasicDBList();
            list.addAll(jsonArray.getList());
            data = list;
        }
    }
    

    dataを宣言します Objectのタイプとしてのフィールド 、3種類のセッターを実装します。

    テストケースは次のとおりです。

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class LogRepositoryTest {
    
        @Autowired
        private LogRepository logRepository;
    
        @Test
        public void test() {
            Log strLog = new Log();
            strLog.setData("string here");
            logRepository.save(strLog);
            Log objLog = new Log();
            objLog.setData(new JsonObject().put("key", "value").put("obj", new JsonObject()));
            logRepository.save(objLog);
            Log aryLog = new Log();
            aryLog.setData(new JsonArray().add("a").add("b").add("c"));
            logRepository.save(aryLog);
        }
    }
    

    そしてその結果:

    {
            "_id" : ObjectId("5a09fa46a15b065268a0a157"),
            "_class" : "ltd.linkcon.spider.domain.Log",
            "data" : "string here"
    }
    {
            "_id" : ObjectId("5a09fa46a15b065268a0a158"),
            "_class" : "ltd.linkcon.spider.domain.Log",
            "data" : {
                    "key" : "value",
                    "obj" : [ ]
            }
    }
    {
            "_id" : ObjectId("5a09fa46a15b065268a0a159"),
            "_class" : "ltd.linkcon.spider.domain.Log",
            "data" : [
                    "a",
                    "b",
                    "c"
            ]
    }
    



    1. 配列の配列のMongoフィルター配列

    2. Mongodb-データベースまたはコレクションレベルでレプリケーションを設定する

    3. MongoDB 4.0で配列の内容をコンマ区切り値として保持することにより、文字列配列を文字列に変換する方法

    4. Redisで偏ったハッシュスロットを修正する方法