2017-09-06 12 views
0

私はfindOneAndUpdateupsert: trueをオプションで使用しています。Mongoose findOneAndUpdate更新または挿入に基づく条件付きフィールド値..?

ドキュメントを更新するか挿入するかによってフィールドを条件付きで設定したいと考えています。それが更新だとき

const find = { email: '[email protected]' } 
const newDoc = { name: 'me', email: '[email protected]', key: '???' } 
const options = { new: true, upsert: true } 
Accounts.findOneAndUpdate(find, newDoc, options) 

は、私が一人でkeyフィールドを残しておく必要がありますが、それは、インサートだとき、私は新しいキーを生成する必要があります。

これは可能ですか?

+1

['$ setOnInsert'](https://docs.mongodb.com/manual/reference/operator/update/setOnInsert/)。それはドキュメントにあります。あなたのタイトルから関連する単語を入力すると、奇妙なことが起こります... –

+0

完璧、ありがとうございます! ...そしてはい、これはダブですが、この質問に対する@JeremyThilleの回答も機能します... –

答えて

1

あなたのMongooseモデルでデフォルトを設定することができます。例えば

:次に

const generateKey =() => { 
    // ... 
    return key 
} 

// in your Mongoose model 
key : { 
    type : String, 
    default : generateKey 
} 

は、あなたがモンゴに送っているドキュメント内のキーを指定しない:

const newDoc = { name: 'me', email: '[email protected]' } // No key 

だから、挿入時にキーを生成、または残しますそうでなければそうです。

関連する問題