Как отправить массив в атлас mongodb? - PullRequest
0 голосов
/ 01 октября 2019

Я хочу отправить 3 массива в Mongogodb Atlas, но у меня много проблем с этим, я надеюсь, вы мне поможете.

Это мой код:

модель: data.js:

'use strict'

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var dataSchema = Schema({
    codDev: Number,
    names: [String]
    values: [String]
    units: [String]
});

module.exports = mongoose.model('Data', dataSchema,'Data');  

контроллер: project.js:

'use strict'

var newmodel = require('../models/data');

var controller = {
setData: function (req, res) {
        var TestNMD = new newmodel();

        TestNMD.codDispo = req.params.codDev;
        TestNMD.nombres = req.params.names;
        TestNMD.valores = req.params.values;
        TestNMD.unidades = req.params.units;

        if(req.params.codDev == null || req.params.names == null || req.params.values ==null || req.params.units ==null){
            return res.status(400).send({
                message: "Can't save."
            });
        }

        TestNMD.save((ex, dataStored) => {
            if (ex) return res.status(500).send({
                message: "Error saving. " + ex
            });

            if (!dataStored) return res.status(400).send({
                message: "Can't save"
            });

            return res.status(200).send({
                data: dataStored
            });
        }); 
    },
};

module.exports = controller;

маршруты: rout.js

'use strict'

var express = require('express');
var projectControler = require('../controllers/project.js');

var router = express.Router();


router.post('/setdata/:codDev?/:names?/:values?/:units?', projectControler.setData);


module.exports = router;

Вот как я тестирую API: http://localhost:3700/api/setdata/1/[a,a]/[2,2]/[c,c]

Прежде всего, когда я проверяю это на почтальоне, я получаю эту ошибку: "message": "ОшибкаMongoWriteConcernError: В настройках набора реплик не обнаружено режима беспокойства о записи с именем «Major /» "

Я обнаружил, что это происходит из-за моей строки подключения к mongodb Atlas, поэтому пришлось удалить это "test? retryWrites = true & w = большинство /" , чтобы заставить его работать. Но я не знаю, может ли это беспокоить другие вещи. Я хочу знать, возможно ли сделать так, чтобы это работало без удаления этой части строкового соединения.

Кроме того, причина появления запроса заключается в том, что когда он отправляет данные, он сохраняет их так:

{
    "data": {
        "names": [
            "[a,a]"
        ],
        "values": [
            "[2,2]"
        ],
        "units": [
            "[c,c]"
        ],
        "_id": "5d93b98a69f98728e03c3d2f",
        "codDev": 1,
        "__v": 0
    }
}

И я хочу сохранить массив как массив, а не как строку.

Итак, я попробовал это:

var dataSchema = Schema({
    codDev: Number,
    names: [Array]
    values: [Array]
    units: [Array]
});

Но у меня есть это:

{
    "data": {
        "names": [
            [
                "[a,a]"
            ]
        ],
        "values": [
            [
                "[2,2]"
            ]
        ],
        "units": [
            [
                "[c,c]"
            ]
        ],
        "_id": "5d93ba6592eb87376cdc1e7d",
        "codDev": 1,
        "__v": 0
    }
}

И все, что я хочу, это получить что-то вроде этого:

{
    "data": {
        "names": [
            [
                "a",
                "a"
            ]
        ],
        "values": [
                "2",
                "2"
        ],
        "units": [
            [
                "c",
                "c"
            ]
        ],
        "_id": "5d93ba6592eb87376cdc1e7d",
        "codDev": 1,
    }
}

Без "__v": 0 тоже.

Спасибо!

1 Ответ

1 голос
/ 02 октября 2019

Значения req.params всегда будут строками, поэтому вам нужно будет преобразовать их в массив вручную. Много способов вы могли бы сделать это. Например:

TestNMD.names = req.params.names.split(',')
TestNMD.values = req.params.values.split(',')
TestNMD.units = req.params.units.split(',')

, который разделит строку на массив, используя ',' в качестве разделителя. например, 'a, a' станет ['a', 'a']

Относительно "__v", вопрос здесь объясняет, что это такое, как вы можете избавиться от него инекоторые ссылки, чтобы узнать, почему вы можете не захотеть избавиться от него.

...