使用 Mongo/Express/Angular/Node 推送到模型中的数组
Posted
技术标签:
【中文标题】使用 Mongo/Express/Angular/Node 推送到模型中的数组【英文标题】:Push to array within a model using Mongo/Express/Angular/Node 【发布时间】:2014-01-28 15:15:00 【问题描述】:我有一个名为“患者”的模型和一个名为“药物”的模型。每个患者可以服用多种药物。
我正在使用 ng-repeat 循环遍历患者并显示。每个患者都会显示一个包含可用药物列表的选择框。我可以将所选药物的 id 记录到控制台,但似乎无法成功将其推送到模型。
节点模型 >
Patient.model.js
module.exports = function (mongoose, name)
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
var schema = mongoose.Schema(
name: String,
drugs: [String],
tests: [String]
);
mongoose.model(name, schema);
;
Drug.model.js
module.exports = function (mongoose, name)
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
var schema = mongoose.Schema(
name: String
);
mongoose.model(name, schema);
;
Patient.controller.js
var mongoose = require('mongoose'),
Patient = mongoose.model('Patient');
exports.create = function (req, res)
var patient = new Patient(req.body);
patient.save(function (err)
if (err)
res.send(400, err);
else
res.send(patient);
);
;
exports.read = function (req, res)
Patient.findById(req.params.id, function (err, patient)
if (err)
res.send(400, err);
else if (!patient)
res.send(404);
else
res.send(patient);
);
;
exports.update = function (req, res)
var id = req.params.id,
data = req.body;
delete data._id; // Just in case...
Patient.findByIdAndUpdate(id, data, function (err)
if (err)
res.send(400, err);
else
res.send(success: true, msg: 'saved');
);
;
exports.del = function (req, res)
var id = req.params.id;
Patient.findById(id, function (err, patient)
if (err)
res.send(400, err);
else if (!patient)
res.send(404);
else
patient.remove(function (err)
if (err)
res.send(400, err);
else
res.send(success: true, msg: 'removed');
);
);
;
exports.search = function (req, res)
Patient.find(req.query, function (err, patients)
if (err)
res.send(400, err);
else
res.send(patients);
);
;
patientController.js
angular
.module('dpMean.patient')
.controller('PatientCtrl', function ($scope, Restangular, $log)
'use strict';
var Patient = Restangular.all('patient');
Patient.getList()
.then(function (patients)
$scope.patients = patients;
)
.catch(function (err)
$log.error(err);
);
var Drug = Restangular.all('drug');
Drug.getList()
.then(function (drugs)
$scope.drugs = drugs;
)
.catch(function (err)
$log.error(err);
);
/* $scope.add and $scope.delete live here */
$scope.select = function(id, pid)
console.log(id);
var patientDrugs = Restangular.one("patient", pid);
var array = patientDrugs;
console.log(array);
var newarray = array.push(id);
var update =
drugs: newarray
console.log(patientDrugs);
patientDrugs.put(update);
;
);
<div>
<h3>Patients</h3>
<ul class="unstyled">
<li class="patient-item" ng-repeat="patient in patients">
<h4>patient.name</h4>
<label>Add Drug</label>
<select ng-options="drug.name for drug in drugs" ng-model="drug" ng-change="select(drug._id, patient._id)">
</select>
<ul>
<li ng-repeat="drug in patient.drugs">
drug
</li>
</ul>
patient.drugs
<hr />
<a ng-click="delete(patient._id)">[Remove Patient]</a>
</li>
<li class="patient-item">
<form ng-submit="add()">
<input type="text" placeholder="New item..." ng-model="name"/>
<button type="submit" ng-disabled="posting || !name">Add</button>
</form>
</li>
</ul>
</div>
期望行为:当用户从选择框中选择药物时,所选药物的 id 将被添加到患者.patientID.drugs,这是一个数组。
非常感谢您提供的任何帮助。
【问题讨论】:
patient
数组在patientController.js
中的位置在哪里?
【参考方案1】:
这个
$scope.select = function(id, pid)
console.log(id);
var patientDrugs = Restangular.one("patient", pid);
var array = patientDrugs;
console.log(array);
var newarray = array.push(id);
var update =
drugs: newarray
console.log(patientDrugs);
patientDrugs.put(update);
;
可以缩短为
$scope.select = function(id, pid)
var patientDrugs = Restangular.one("patient", pid);
var update =
drugs: patientDrugs.push(id)
patientDrugs.put(update);
;
然后立即弹出一个问题,您得到parientDrugs
数组,将ID
推入其中,在您创建的名为update
的对象中,现在您再次将对象推入原始数组。
如果我理解正确,这应该可以。但我不确定
$scope.select = function(id, pid)
var patientDrugs = Restangular.one("patient", pid);
patientDrugs.push((drugs: id)); //This line depends on what the patientDrugs object looks like
;
【讨论】:
以上是关于使用 Mongo/Express/Angular/Node 推送到模型中的数组的主要内容,如果未能解决你的问题,请参考以下文章