0

スキーマ:

 /* 0 */
    {
      "_id" : ObjectId("4fb6376ef31dfd11c41c7fd0"),
      "Name" : "A",
      "Val" : "#rt45"
    }

    /* 1 */
    {
      "_id" : ObjectId("4fb655aff31dfd11c41c7fd1"),
      "Name" : "B",
      "Val" : "#gh46"
    }

    /* 2 */
    {
      "_id" : ObjectId("4fb65626f31dfd11c41c7fd2"),
      "Name" : "C",
      "Val" : "#rt67"
    }

「名前」にデータを挿入する必要があり、フィールド「名前」(ここではA、B、C)の値が存在するかどうかを確認する必要があるかどうかを照会したい場合は、挿入からスキップする必要があります希望誰かがこれを手伝うことができます、私はc#ドライバーを使用しています サンプルコードを共有してください よろしくお願いします。私はこれに行ってきました

IMongoQuery query = Query.Exists("_id", true);
                var fields = Fields.Include("Name");
                var result = collection.Find(query).SetFields(fields).SetLimit(1).FirstOrDefault();
4

2 に答える 2

0

最初に Find を呼び出して、同じ Name 値を持つドキュメントが既に存在するかどうかを確認し、Find が何も返さない場合にのみ Insert を呼び出すことができます。ただし、複数のプロセスまたはスレッドが同じことを行っている場合、これは安全ではありません。

もう 1 つの方法は、Name に一意のインデックスを作成し、Insert を実行するだけです。同じ名前の値を持つ別のドキュメントが既に存在する場合、挿入は失敗します。

于 2012-05-18T18:46:27.633 に答える
0

FindAndModifyは、MongoDB で照会と更新を一度に行う方法です。

もう 1 つの方法は、ユーザー Update だけです。

Collection.Update(Query. ..., Update.Set())

2 つ目は、新しい投稿のすべての情報が存在する場合、クエリで見つからない場合に投稿を作成することもできます。

あなたがやろうとしていることのステップバイステップの例を (平易な英語で) 書こうとすると、C# の例を書けるかもしれません。

于 2012-05-18T14:39:49.113 に答える