1

我知道这是一个简单的问题,但我正在尝试解决如何从 Iron 路由器中的路由更新文档中的值。我找到了需要放置该函数的位置,但我正在努力使用使其工作所需的 mongo 代码。

每次单击链接时,我都会尝试增加视图元素,因此已将以下代码添加到路由中。

   data: function () {
      var project = projectDocs.findOne(this.params._id);
      // need to increment views value by one
      console.log(project.views);
      projectDocs.update({id: project.id},
        {$inc: {views: 1}}
      );
      console.log(project.views);
      return project;
    }

  });

project.views 值正在返回正确的值,但更新该值的代码此时会引发异常。

我尝试了 project.views++ 的简单事情,它增加了函数中的变量,但它永远不会被推送到数据库(我猜这并不奇怪)。

有人可以指出我需要将这个值赋予 inc 的方向(这甚至是正确的地方吗?)。

谢谢。

彼得。

好的,我发现这个链接已经引导了我http://books.google.com.au/books?id=uGUKiNkKRJ0C&pg=PA37&lpg=PA37&dq=Cannot+apply+$inc+modifier+to+non-number&source= bl&ots=h7qyOddRsf&sig=EWFw9kNLGHoFEUS-nTNsBStDRcQ&hl=en&sa=X&ei=cRGXUse0DNGciAfk6YHgCA&ved=0CFcQ6AEwBQ#v=onepage&q=Cannot%20apply%20%24inc%20modifier%20to%20non-number&f=false这说明你只能输入这个数值似乎是一个字符串。

现在的问题是我似乎陷入了无限循环。

该功能现在看起来像

 this.route('projectPage', {
    path: '/projects/:_id',
    waitOn: function() {
      return Meteor.subscribe('singleProject', this.params._id);
    },
    data: function () {
      var project = projectDocs.findOne(this.params._id);
      // need to increment views value by one
      console.log("Views", project.views);
      console.log("Project", project);
      projectDocs.update(project._id,
        {$inc: {views: 1}}
      );
      console.log(project.views);
      return project;
    }

  });

为什么会这样循环?

4

2 回答 2

0

只需进一步阅读关于 Iron-router 的精彩新文档,并将 $inc 函数移至卸载钩子,一切似乎都很好。

 this.route('projectPage', {
    path: '/projects/:_id',
    waitOn: function() {
      return Meteor.subscribe('singleProject', this.params._id);
    },
    data: function () {
      return projectDocs.findOne(this.params._id);
    },
    unload: function() {
      var project = projectDocs.findOne(this.params._id);
      // need to increment views value by one
      projectDocs.update(project._id,
        {$inc: {views: 1}}
      );
    }
    // could possibly use layout: popup_layout? here
  });

希望得到一些确认,这实际上是我应该这样做的地方(做这么多“findOne”似乎有点效率低下),但它目前正在工作。

于 2013-11-28T10:17:37.967 回答
0

使用 _id 而不是 id。所以

      projectDocs.update({_id: project._id},
        {$inc: {views: 1}}
      );

如果不是这样,也许你可以用你得到的任何异常来更新你的答案。

于 2013-11-28T05:03:38.083 回答