【问题标题】:How to send array to mongodb atlas?如何将数组发送到 mongodb 地图集?
【发布时间】:2020-01-31 04:21:20
【问题描述】:

我想向 Mongogodb Atlas 发送 3 个数组,但我遇到了很多问题,希望您能帮助我。

这是我的代码:

模型: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”:“保存错误。MongoWriteConcernError:在副本集配置中找不到名为'majority/'的写入关注模式”

我发现这是因为我与 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 也是。

谢谢!

【问题讨论】:

    标签: node.js mongoose mongodb-atlas


    【解决方案1】:

    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 解释了它是什么,如何摆脱它,以及一些链接来了解您可能不想摆脱它的原因。

    【讨论】:

    • 这太容易了!我在想这很重要。非常感谢!
    猜你喜欢
    • 2022-07-21
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 2017-09-19
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多