как вставить документ bson и данные типа Bson String в один столбец в коллекции mongodb? - PullRequest
0 голосов
/ 24 апреля 2020

Я передаю документ BSON для вставки в коллекцию MongoDB. Ниже приведен мой код:

public void operationMongodb(UInt64 seq, UInt32 blocknumber, DateTime datetime, String action, String Receiver, String Trxid,BsonDocument data)
        {
            try
            {
                MongoClient client = new MongoClient(connectionString);
                IMongoDatabase db = client.GetDatabase("dqzmember");
                var collection = db.GetCollection<BsonDocument>("memberdata");
                var document = new BsonDocument {
                    { "Sequence", BsonInt64.Create(seq) },
                    {"Block Number", BsonInt32.Create(blocknumber) },
                    {"Datetime", BsonDateTime.Create(datetime) },
                    {"Action", BsonString.Create(action) },
                    {"Receiver", BsonString.Create(Receiver) },
                    {"TransactionID", BsonString.Create(Trxid) },
                    {"Data", BsonDocument.Create(data) }
                };

                collection.InsertOneAsync(document);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error" + ex);
            }
        }

public async void getinfo()
        {
            try
            {
                UInt64 sequence; UInt32 blocknumber; DateTime datetime; string actionaname; String Receiver; String Trxid;
                var r = eos;
                var resultaction = await eos.GetActions("jeffaccount", 0, 100);

                string globalActionJson = JsonConvert.SerializeObject(resultaction);

                foreach (GlobalAction action in resultaction.actions)
                {
                    var test = action.action_trace.act;
                    sequence = Convert.ToUInt64(action.account_action_seq);
                    blocknumber = Convert.ToUInt32(action.block_num);
                    datetime = Convert.ToDateTime(action.block_time);
                    actionaname = test.name.Trim();
                    Receiver = action.action_trace.receipt.receiver.Trim();
                    Trxid = action.action_trace.trx_id.Trim();

                    var dataarguments = JsonConvert.SerializeObject(test.data);
                    BsonDocument datadocument = new BsonDocument();
                    datadocument = BsonDocument.Parse(dataarguments);
                    operationMongodb(sequence, blocknumber, datetime, actionaname, Receiver, Trxid, datadocument);
                }

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
}

Моя проблема в переменной dataarguments иногда JSON, а иногда просто небольшая строка (нет JSON). Если это JSON, то этот код работает нормально, но для строки, я не понимаю, как проверить это условие при вставке данных в качестве документа. Я пытаюсь сделать это в operationMongodb :

 object insertData;
    if (IsJson(data))
    {
        insertData = BsonDocument.Parse(data);
    }
    else
    {
        insertData = BsonString.Create(data);
    }

, тогда как Is Json - это функция для проверки, являются ли данные JSON или нет. Мне просто нужно проверить тип данных и вставить соответственно в том же столбце. Так что я могу проверить условие при предоставлении аргумента для вставки, то есть здесь:

{"Данные", BsonDocument.Create (data)}

Или какое-либо другое решение? Пожалуйста, помогите.

...