問題

Mongooseのupsertオプションがawait経由で新しい文書を作成したかどうかを知る方法はありますか?基本的には、コールバックを除いてこのを実行したいと思います。

注:私はfindByIdAndUpdateを使用しています

  ベストアンサー

mongoose関数のcallbackasync await、または.thenでも違いはありません

コールバック

 User.update({ _id: usr._id }, upsertData, { upsert: true }, function(err, num) {
  console.log(err)
  console.log(num)
}
 

非同期Await

 try {
  const num = await User.update({ _id: usr._id }, upsertData, { upsert: true })
  console.log(num)  
} catch (err) {
  console.log(err)
}
 

したがって、基本的に上記の両方の関数は同じことを記録します

今あなたが望むのは、返されたドキュメントがfindOneAndUpdate(findByIdAndUpdate)を使って更新されているかどうかをチェックすることです。

 const num = await User.findOneAndUpdate({ _id: id }, upsertData, { upsert: true })
console.log(num) 
 

したがって、ここで num は、ドキュメントが既に存在する場合、または挿入されている場合は null を出力します。

  同じタグがついた質問を見る

node.jsmongodbmongoosemongodb-query