Mongoose - 'save' 方法不存在。

3
考虑一个在MongooseJS上运行的MongoDB集合。

示例代码:

Person.where('uid').equals(19524121).select('name').exec(function(err, data){
     // Here I can get the data correctly in an array.
     console.log(JSON.stringify(data)); 
     data[0].name = "try to save me now"; // Select the first item in the array
     data[0].save(); // Object #<Promise> has no method 'save'.
}

错误 - 似乎找不到解决方法。

对象 #<Promise> 没有方法 'save';

我有点困惑为什么会出现这种情况,已经进行了相当多的研究,但好像找不到直接的答案。

1个回答

12
< p > < code > find 的结果是记录数组。您可能想要像这样循环遍历这些记录:

Person.find({ uid: /19524121/ }).select('name').exec(function(err, data){
  for(var i = 0; i < data.length; i++) {
     var myData = new Person(data[i]);
     myData.name = "try to save me now";
     myData.save(); // It works now!
  }
}

此外,从mongoose主页来看,回调函数的原型是function(err, data),而不是你之前纠正的顺序。

请看主页上的这个部分:

var fluffy = new Kitten({ name: 'fluffy' });

如果data[0]当前是普通的JSON对象,我们需要添加一行代码以将其转换为BSON模型对象。

var myData = new Person(data[0]);

抱歉,当我输入示例代码时,我弄错了并忘记包含您已经提出的建议。您所提出的两个想法已经被应用,如更新的问题所反映的那样。 - Mathew Kurian
我知道了。进一步的研究正在揭示中。现在正在更新答案。 - Austin Mullins
谢谢,现在更明白了。 - Mathew Kurian
好的,我现在只需要删除原始的Person,否则当我尝试保存新的Person时会出现冲突的ID。现在只是在努力弄清楚这个问题。但除此之外,是的! - Mathew Kurian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接