我有一个名为client
的 MongoDB文档(在MongoLab.com上),这将用于跟踪健身比赛。每周都会有一个“称重”和其他一些细节跟踪。
我坚持的是如何将子文档添加到client
文档,以使用 AngularJS 跟踪结果。
我觉得这可能是一些我不知道的明显和基本的东西,但我还没想出如何将新字段附加到现有记录,数组或非数组。
以下是我认为相关的详细信息,但如果合适,请随时询问更多详细信息。
完整代码粘贴在http://pastebin.com/4tyRiKus
示例客户端(我可以毫无困难地添加客户端)
{
"_id": {
"$oid": "50eee69fe4b0e4c1cf20d116"
},
"firstName": "Jon",
"lastName": "Doe"
}
现在来自一个不同的模板,该模板通过{{1>}( / detail /:cliendId )提取数据,但我正在寻找一个权重的数据点在。
_id
点击添加按钮,继续执行下一部分。
控制中的函数(这会触发并调用MongoLab模块中的update())
<form ng-submit="addWeighIn()">
<input type="date" ng-model="date" required />
<input type="text" ng-model="weight" placeholder="Weight" smart-float required />
<input type="submit" class="btn btn-primary" value="Add" />
</form>
控制台显示 addWeighIn 行,网络数据显示它发送了一个请求,但它实际上没有文档中的权重,并且与上面相同。
从$ scope.addWeighIn()调用MongoLab资源并触发
$scope.addWeighIn = function () {
console.log("addWeighIn: " + $scope.date + " : " + $scope.weight);
// the below line is obviously wrong, just out of ideas.
$scope.client.weights = [ { date: $scope.date, weight: $scope.weight } ];
$scope.client.update(function () {
});
};
通过update()发送的数据(缺少新的称重数据)
Client.prototype.update = function (cb) {
console.log("mongolab: update: " + cb);
return Client.update({ id: this._id.$oid },
angular.extend({}, this, { _id: undefined }), cb);
};
这就是我正在寻找的,在实际的数据库中,但我需要添加权重并相信我不理解一些基本的东西。
{
"_id": {
"$oid": "50eee69fe4b0e4c1cf20d116"
},
"firstName": "Jon",
"lastName": "Doe"
}
我有一些关于该怎么做的问题。
{
"_id": {
"$oid": "50eee69fe4b0e4c1cf20d116"
},
"firstName": "Jon",
"lastName": "Doe"
"weights": [
{ "date": "1/3/2013",
"weight": 155 }
{ "date": "1/10/2013",
"weight": 150 }
]
}
设置为 client.weights.date 吗?例如:ng-model
(不起作用,但看看是否有类似的方式)我在http://docs.mongodb.org/manual/applications/update/找到了 $ push 描述,可能就是我需要使用的内容,但我不确定如何使用 AngularJS方式< / em>的
答案 0 :(得分:3)
我最终发现我的问题出在 MongoLab 资源上。
我把我悲伤的实现换成了https://github.com/pkozlowski-opensource/angularjs-mongolab处找到的那个,但它确实有效。
由于我很难找到一个例子,这里是如何添加子文档。
<强> HTML 强>
<form ng-submit="addWeighIn()">
<table class="table table-striped">
<thead>
<tr>
<th>Date</th>
<th>Weight</th>
<td></td>
</tr>
</thead>
<tbody>
<tr ng-repeat="weight in client.weighIn | orderBy:'date'">
<td>{{weight.date}}</td>
<td>{{weight.weight}}</td>
<td></td>
</tr>
</tbody>
<tfoot>
<tr>
<td>
<input type="text" ng-model="date" placeholder="Date of weigh-in" required />
</td>
<td class="input-append">
<input type="text" ng-model="weight" placeholder="Weight" smart-float required />
<span class="add-on">lbs</span>
</td>
<td><input type="submit" class="btn btn-primary" value="Add" /></td>
</tr>
</tfoot>
</table>
</form>
<强>脚本强>
$scope.addWeighIn = function () {
console.log("addWeighIn: " + $scope.date + " : " + $scope.weight);
$weighIn = { date: $scope.date, weight: $scope.weight };
// push to the existing array if it exists
if ($scope.client.weighIn)
$scope.client.weighIn.push($weighIn);
// else create the field if it doesn't exist
else
$scope.client.weighIn = [ $weighIn ];
$scope.client.update(function () {
// do whatever after the update
});
};