gpt4 book ai didi

javascript - 正确保存数据到mongoDB

转载 作者:行者123 更新时间:2023-11-28 06:52:58 25 4
gpt4 key购买 nike

有 Angular 中的应用程序。不明白如何正确保存数据。

这是我的 API 的一部分:

.post('/type/add', function(req, res){
var type = new NewType({
type: req.body.type,
subtype: req.body.subtype,
});
type.save(function(err, newTypeOne){
if(err){
res.send(err);
return;
}
res.json({message: "New type Created!"});
});
})

这是我的 mongodb 架构:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Type = new Schema({
type: String,
subtype: String
});
module.exports = mongoose.model('NewType', Type);

这是我的 Controller :

.controller('AddTypeController', ['CreateType', 'AllType', '$location', function(CreateType, AllType, $location){
vm = this;
vm.createType = function(){
vm.message = '';
CreateType.create(vm.typeData)
.success(function(data){
vm.typeData = '';
vm.message = data.message;
$location.path('/type')
});
};
AllType.getAll().success(function(data){
vm.types = data;
});
}])

这是我的服务:

angular.module('typeService', [])
.factory('AllType', function($http){
var typeFactory = {};
typeFactory.getAll = function(){
return $http.get('/api/type');
};
return typeFactory;

})
.factory('CreateType', function($http){
var typeFactory = {};
typeFactory.create = function(typeData){
return $http.post('/api/type/add', typeData);
};
return typeFactory;
})

我的 HTML:

<div ng-controller="AddTypeController as type">
<form>
<md-select ng-model="type.typeData.type" placeholder="Type">
<md-option ng-value="typeone.type" ng-repeat="typeone in type.types">{{typeone.type}}</md-option>
</md-select>
<md-input-container flex>
<label>SubTyp</label>
<input ng-model="type.typeData.subtype">
</md-input-container>
<button ng-click="type.createType()">Send</button>
</form>
</div>

现在我遇到一个问题:例如我还没有数据。我添加第一个选择 - TypeOne,第二个选择 - SubTypeOne。现在在数据库中我有{类型:TypeOne,子类型:SubTypeOne}。当我将第二个子类型添加到 TypeOne 时,我选择第一个选择 TypeOne 并在输入中添加子类型 - SubTypeTwo。现在我在数据库中有第二条记录{type:TypeOne,subtype:SubTypeTwo},在此之后在第一个选择中我有TypeOne两次。

但我想做这样的事情:如果我已经有需要的类型,并且只想添加新的子类型。在这种情况下,我希望在数据库中有这样的内容:{type: TypeOne, subtype:[subtype: SubTypeOne, subtype: SubTypeTwo]}。为此,我应该像数组一样保存子类型,但不明白如何保存。

最佳答案

在您的模型中,您应该将子类型作为字符串数组。然后你可以将它们推送到该数组上。示例如下:

var Type = new Schema({
type: String,
subtype: [String]
});

然后你可以有一个更新方法(mongoose:findOneAndUpdate),而不仅仅是创建一个新类型。或者您可以让它检查是否可以找到并更新它,否则创建一个新的。示例如下:

CreateType.findOneAndUpdate({type: 'type1'},
{$push: {subtype: 'type2'} },
function(err, data) {
if (err)
// Do the create for a new one here
else
// Send back a 200 OK or whatever else
});

这将允许您按原样更新数组。我鼓励您查看findOneAndUpdate关于 mongoose 的文档,以及 $push蒙戈文档。

希望这有帮助!我最近一直在开发一个应用程序,它基本上就是我在这里描述的。所以我实际上一直在使用它来证明它是有效的。

关于javascript - 正确保存数据到mongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32805931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com