向MongoLab添加一个新的模型字段AngularJS方式

时间:2013-01-10 19:05:29

标签: javascript mongodb angularjs mlab

我有一个名为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"
}

我有一些关于该怎么做的问题。

  1. 我可以在 HTML 代码中以声明方式执行此操作,例如将{ "_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(不起作用,但看看是否有类似的方式)
  2. 如果没有声明,通过AngularJS执行此操作的正确方法是什么?
  3. 我应该使用哪种术语来查找内容?这似乎是我的主要挫折,找不到例子。
  4. 我在http://docs.mongodb.org/manual/applications/update/找到了 $ push 描述,可能就是我需要使用的内容,但我不确定如何使用 AngularJS方式< / em>的

1 个答案:

答案 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
    });
};