私は自分でこの問題に遭遇しました。ワンコールソリューションを見つけることができませんでしたが、配列要素に一意の値がある場合に機能する2コールソリューションを見つけました 。 $pull
を使用します 最初にコマンドを実行します。これにより、配列から要素が削除され、次に$push
。
db.soup.update({
"tester":"tom"
}, {
$pull: {
'array': {
"id": "3"
}
}
})
db.soup.update({
"tester":"tom"
}, {
$push: {
'array': {
"id": "3",
"letter": "d"
}
}
})
これは、ドキュメントが存在しない場合、ドキュメントは存在するが配列内のエントリが存在しない場合、およびエントリが存在する場合に機能するはずです。
繰り返しますが、これはid
のようなものがある場合にのみ機能します この例のフィールドは、配列の要素全体で一意である必要があります。