2016-06-20 9 views
0

新しい文書が存在しない場合は作成し、作成した新しい文書を返したい場合は、私は例外がスローされたいです。'存在しない場合は'新しい文書を作成してMongoDB NodeJSネイティブドライバで新しい文書を返す方法

私はこれをやっているやり方がハッキリしているようだと思いますが、これを行うにはより良い方法がありますか?あなたはそれが存在しない場合は、それを更新したい場合は

var query = { name: 'guaranteed to be unique' } 
var new_doc = { ... } 
var col = // the Mongo collection we're using 

col.updateOne(
    query, 
    new_doc, 
    {upsert: true} 
) 
.then(update => col.findOne({_id, update.result.upserted.pop()._id})) 
.then(doc => console.log(doc)) 
.catch(exception => console.log('that already exists')) 
+1

を設定して検索が依存しますか?もしそうなら、あなたは単に 'update'に' {upsert:true} 'を使うことができます。それ以外の場合は正しく実行しています。 –

+0

なぜ 'name'にユニークなインデックスがありませんか? – robertklep

+0

@robertklep、ユニークなインデックスがこれをどのように解決するか説明できますか? – MatUtter

答えて

0

多くの後、私はいくつかのanswers in this postを見つけましたが、ここではfindOneAndUpdateできれい例だとreturnOriginalプロパティがfalse

col.findOneAndUpdate(
    query, 
    new_doc, 
    { upsert: true, returnOriginal:false } 
) 
.then(update => update.value) 
.then(doc => console.log(doc)) 
+0

文書がすでに存在する場合、 'new_doc'のどのプロパティもデータベースのプロパティを上書きすることに注意してください。 – robertklep

関連する問題