在MongoDB中存储JSON

时间:2017-07-19 07:34:25

标签: mongodb

我试图在MongoDB中存储一些数据,我不确定我提供的数据类型,因为我是从我正在使用的formbuilder(https://github.com/kevinchappell/formBuilder)获取的。

我从以下网址获取数据:

  document.getElementById('getJSON').addEventListener('click', function() {
  var ans = formBuilder.actions.getData('json', true);

  //console.log(ans);
  //var ans2 = JSON.parse(ans);

  alert(ans);

  console.log(ans);

  $.ajax({
        type: "POST",
        data: ans,
        url: "/j",
        success: function(){
            console.log('success');
        }
    });

    document.forms["myForm"].submit();

});

它到达我的后端:

//FETCHING THE JSON OF THE CLAUSE FORM CREATED BY THE ADMIN
router.post('/j', function(req, res, next) {

req.session.fdata = req.body; //JSON FETCHED FROM JAVASCRIPT USING AJAX, STORED IN SESSION


if(req.session.fdata==null) //CHECKING IF WE ARE RECEIVING VALUES
{
    res.redirect('/admin');
}
else {

    mongo.connect(url, function (err, db) {

        assert.equal(null, err);

        //var jfdata = JSON.parse(req.session.fdata);

        db.collection('clauses').insertOne(req.session.fdata, function (err, result) {

            console.log('New Clause Added');
            console.log(req.session.fdata);
            db.close();

        });
    });

    res.redirect('/admin');
}
});

我将它插入数据库,它在数据库中看起来很好但是在检索时我似乎无法访问数据的内部部分。我的数据格式是否错误?是JSON还是JS对象?

在DB中看起来如此:(插入前db是空的)enter image description here

这是控制台打印的内容

 [ { _id: 596de520ef77eb2614cd1e47,
 '[\n\t{\n\t\t"type": "number",\n\t\t"label": "Number",\n\t\t"description": 
 "total number",\n\t\t"placeholder": "0",\n\t\t"className": "form-
 control",\n\t\t"name": "number-1500374279764"\n\t}\n]': '' },
 { _id: 596de520ef77eb2614cd1e48 } ]

1 个答案:

答案 0 :(得分:1)

您尝试保存的数据对我来说似乎不对。

您获得的是JSON对象的字符串。 您必须使用JSON.parse将其转换为正确的JSON对象。

JSON.parse('[\n\t{\n\t\t"type": "number",\n\t\t"label":"Number",\n\t\t"description": "total number",\n\t\t"placeholder": "0",\n\t\t"className": "form-control",\n\t\t"name": "number-1500374279764"\n\t}\n]')    

之后,您可以形成数据并插入数据库。

var query = {
             array : [{"type": "number",
                    "label": "Number",
                    "description": "total number",
                    "placeholder": "0",
                    "className": "form-control",
                    "name": "number - 1500374279764"}]
        }

db.collection('clauses').insertOne(query, function (err, result) 
{
        db.close();
});

让我知道它是否有帮助!