使用$ push和db.update时出现Meteor.methods()意外行为

时间:2013-01-06 21:57:46

标签: javascript node.js mongodb meteor

我有这段代码来更新条目:

function updateList(listTime) {

    var firstList = Project.find().fetch()[0].list; // returns a list
    var nextElement = (firstList[firstList.length-1] + 50); // value of last + 50

    Project.update({name: "List 1"}, {$push: {list: nextElement}});
}

我打电话给:

Meteor.methods({
  updateList: updateList,
});

因为我正在使用python ddp客户端并且需要这样。

问题是nextElement并没有真正增加我列表中的序列。想象一下,我的列表是[50,100,150,...],如果我调用updateList,它会变成[50,100,150,150,150,150 ...]等等......它应该变成[50,100,150,200,250,300 ...]。

有谁知道为什么?

1 个答案:

答案 0 :(得分:2)

首先制作nextElement +1而不是+50

var nextElement = (firstList[firstList.length-1] + 1);

请注意,listTime将成为列表中的最后一个元素。因此,如果您运行updateList(20),则列表将变为[1, 2, 3, 4, 5, 6, 7, 20]。如果您随后致电updateList(2),它将变为[1, 2, 3, 4, 5, 6, 7, 20, 21, 2],依此类推。

我不确定listTime应该做什么但是如果你想将last int + 1添加到列表中:

function updateList() {
    var firstList = Project.find().fetch()[0].list;
    var nextElement = (firstList[firstList.length-1] + 1);

    Project.update({name: "List 1"}, {$push: {list: nextElement}});
}

这将导致:

Project.find().fetch()[0].list
> [1, 2, 3, 4, 5, 6, 7]

updateList()
Project.find().fetch()[0].list
> [1, 2, 3, 4, 5, 6, 7, 8]

updateList()
Project.find().fetch()[0].list
> [1, 2, 3, 4, 5, 6, 7, 8, 9]