如何将数组发送到 mongodb atlas?

How to send array to mongodb atlas?

我想将 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;

路线:routes.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": "Error saving. MongoWriteConcernError: No write concern mode named 'majority/' found in replica set configuration"

我发现这是因为我连接到 mongodb Atlas 的字符串,所以不得不删除这个 "test?retryWrites=true&w=majority/" 以使其工作。但我不知道这是否会给其他事情带来麻烦。我想知道是否可以在不删除字符串连接的那部分的情况下使其工作。

此外,询问标题的原因是因为当它发送数据时,它会这样保存:

{
    "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 也是。

谢谢!

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”,问题 here 解释了它是什么、如何摆脱它以及一些链接以了解为什么您可能不想摆脱它.