如何将数组发送到 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 解释了它是什么、如何摆脱它以及一些链接以了解为什么您可能不想摆脱它.
我想将 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 解释了它是什么、如何摆脱它以及一些链接以了解为什么您可能不想摆脱它.