私は次のクラス構造を持っています:
public class DBTestItem
{
public int p0;
public int p1;
public int p2;
public int p3;
public int p4;
public int p5;
public int p6;
public int p7;
public string data;
}
public sealed class MongoTestItem : DBTestItem
{
public ObjectId _id;
}
_id は私には無意味です。p0 ~ p7 は複合キーを表し、data は値を表します。
MongoTestItem
データが一意であるドキュメントを保存したいのですが、理想的には無意味なので更新を実行せずに保存したいと考えています。つまり、データの値がコレクションに存在しない場合は保存します。
私はドキュメントを見てきましたが、上記を満たすステートメントを書く方法を見つけることができません。
p0 - p7 が複合 _id を作成し、データがリストである別の構造を作成しました。この場合、ステートメントは次のようになります。
var query = Query<MdbData>.EQ(x => x._id, doc._id);
var update = Update<MdbData>.Push(x => x.data, "somenewvalue");
col.Update(query, update, UpdateFlags.Upsert);
これはセマンティクスが異なるため、アップサートは問題ありません。
性能の違いを評価できるように、上記を書きたいと思います。