首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新mongodb文档angular-meteor

更新mongodb文档angular-meteor
EN

Stack Overflow用户
提问于 2016-01-22 00:22:20
回答 1查看 89关注 0票数 0

我正在尝试更新ng-repeat列表中的当前文档,每个文档在ng-repeat中都有自己的形式。

当我点击更新按钮时,我正试图让mongo更新文档,就像我现在拥有的那样,它可以工作了,但我不确定这是不是最好的方法。

这是我的控制器:

代码语言:javascript
复制
$scope.showPreloader = true;

$scope.subscribe('events', () => {
    $scope.showPreloader = false;
});

$scope.helpers({
    events: function() {
        return Events.find({});
    }
});

$scope.save = function() {
    Events.insert($scope.newEvent);
    $scope.newEvent = undefined;
    console.log('saved');
};

$scope.update = function(event) {
    Events.update({
        _id: event._id
    }, {
        $set: {
            name: event.name,
            description: event.description,
            background: event.background
        }
    }, function(error, data) {
        if (error) {
            console.log('unable to update the event: ' + error);
        } else {
            console.log('Done!' + data);
        }
    });
};

正如您在这里看到的,在$scope.update函数中,我设置了所有我想要更新的参数,但是我正在寻找一种自动设置的方法,这样我就不必键入每个要更新的参数,就像在$scope.save函数Events.insert($scope.newEvent);中一样。

表单如下:

代码语言:javascript
复制
<div>
    <div class="spinner" ng-show="showPreloader"></div>
    <div ng-repeat="event in events | orderBy: '-createdAt'" class="wow fadeInUp col-md-6 events-grid-background" ng-style="{'background-image' : 'url({{event.background}})'}">
        <div class="grid-content" ng-init="event.edit = true" ng-show="event.edit" layout="column" layout-wrap layout-align="center center">
            <h2 class="blue grid-title">{{event.name}}</h2>
            <p class="bold">{{event.description | limitTo: 100}}...</p>
            <a ui-sref="event-detail({eventId: event._id})" class="blue-hover bold">&#161;Leer M&#225;s!</a>
            <button class="btn btn-default btn-sm" ng-if="isAdmin" ng-click="event.edit = !event.edit"><strong>Editar</strong></button>
            <button class="btn btn-default btn-sm" ng-if="isAdmin" ng-click="remove(event)"><strong>Delete</strong></button>
        </div>

        <!-- event edit form -->
        <div ng-if="isAdmin" class="grid-content" ng-show="!event.edit">
            <form name="form" novalidate>
                <label class="white" for="name">T&#237;tulo</label>
                <input id="name" name="name" type="text" class="form-control" ng-model="event.name" required>
                <label class="white" for="description">Descripci&#243;n</label>
                <textarea id="description" name="description" type="text" class="form-control" ng-model="event.description" required></textarea>
                <label class="white" for="background">Imagen</label>
                <input id="background" name="background" type="text" class="form-control" ng-model="event.background" required>
                <br>
                <button type="submit" class="btn btn-primary btn-sm" ng-if="isAdmin" ng-click="event.edit = !event.edit; update(event)"><strong>Guardar</strong></button>
                <button class="btn btn-default btn-sm" ng-if="isAdmin" ng-click="event.edit = !event.edit"><strong>Cancelar</strong></button>
            </form>
        </div>
    </div>
</div>

有没有一种方法可以做到这一点,而不需要逐个设置参数?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-01-22 05:03:12

我使用的解决方案是:

代码语言:javascript
复制
var e = event;
var id = event.id;
delete e._id
Events.update({_id: id}, {
  $set: e
}, function(err, result) {
  .. handle result
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34928962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档