Javascript Mongoose.save()未执行

Javascript Mongoose.save()未执行,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有一段代码不起作用。在使用ObjectId(通过将其添加到数组)修改用户文档后,我试图保存该文档。但是,user.save()永远不会执行(我知道这一点,因为文档在数据库中不会更改),回调/承诺也不会执行。但是,正在保存Voot 我试着用回电和承诺来调整一下,但没有成功。有人知道该怎么做吗 代码如下: (为了避免混淆,请注意handleError()和sendJson()函数是我自己定制的函数) User.findById(userId,(err,User)=>…在其回调函数中有两个参数:er

我有一段代码不起作用。在使用
ObjectId
(通过将其添加到数组)修改用户文档后,我试图保存该文档。但是,
user.save()
永远不会执行(我知道这一点,因为文档在数据库中不会更改),回调/承诺也不会执行。但是,正在保存
Voot

我试着用回电和承诺来调整一下,但没有成功。有人知道该怎么做吗

代码如下:

(为了避免混淆,请注意
handleError()
sendJson()
函数是我自己定制的函数)

User.findById(userId,(err,User)=>…
在其回调函数中有两个参数:
err
User

user
是从MongoDB返回的文档,这意味着它是一个普通的Javascript对象,因此不能对其调用
.save()

对于这个用例,您可以使用Mongoose,它将执行
用户
模型所需的两个操作。请记住将
{upsert:true}
作为选项对象,以确保您创建一个新文档(如果它不存在)

范例

User.findByIdAndUpdate({ id }, { update1: 'value' }, { upsert: true }, (err, result) => {
  // handle result
})

不要使用select并在保存之后使用mongoose更新方法。类似这样的方法:User.update({u id:userId},{$push:{voots:voot.{u id}})。然后…

您没有正确处理承诺拒绝。User.save()永远不会执行(我知道这一点,因为文档在数据库中没有更改)-这是错误的。它显然已执行,但可能未成功。对于所有承诺,您都需要使用
.catch
(对User.findById使用回调,对User.save使用承诺,使控制流更容易出错。很好的建议,我刚刚添加了一个.catch(),但是,这不会显示任何错误。使用mongoose更新方法,而不是使用select,然后再使用save。类似这样的方法:User.update({u id:userId},{$push:{voots:voot.\u id}})。然后……这就行了!你能把这个改写成一个答案,这样我就可以把它标记为正确的吗?如果
User
是一个mongoose模型,那么
User
User返回。findById
将是一个mongoose文档,
.save()
将可用。使用回调时,第二个参数仅为查询结果。无论是使用回调还是承诺,默认情况下,结果将是mongoose文档,除非
lean
选项设置为true。
User.findByIdAndUpdate({ id }, { update1: 'value' }, { upsert: true }, (err, result) => {
  // handle result
})