2012-02-21 7 views
3

C#コードでMongoDBの位置演算子を使用したいと思います。ここでは顧客のためのデータ構造は次のとおりです。MongoDBのPostional OperatorをC#コードで使用するには?

{ 
    name:"Robert", 
    age:40, 
    addresses:[ 
    {street:"...", city:"New York", country:"USA", ...}, 
    {street:"...", city:"California", country:"USA", ...}, 
    ], 
} 

だから、私はアドレスは、ニューヨーク市の、私はMongoDBの中でこのクエリを使用する場合は、通りの値を更新する場合:

db.customer.update(
    { "addresses.city" : "New York"}, 
    { $set : { 
     "addresses.$" : {"street":"New street", city:"New York", country:"USA",...} 
    } }, false, true); 

は何ですかC#コードで使用する同等のクエリですか? C#コードで位置演算子を使用するには?

公式のMongoDBドライバを使用しています。

答えて

4

あなたは、このようなC#でそれを記述します。

var newAddress = new BsonDocument 
{ 
    { "street", "New street" }, 
    { "city", "New York" }, 
    { "country", "USA" } 
    // ... 
}; 
var query = Query.EQ("addresses.city", "New York"); 
var update = Update.Set("addresses.$", newAddress); 
var result = customerCollection.Update(query, update, UpdateFlags.Multi); 

作るために危険なアップデートのように思えるん。街のマッチングだけに基づいて住所を上書きしていますか? mongoシェルでクエリが正しく機能していますか?

+0

お返事ありがとうございます。実際には、これは私が使用するクエリではありません。質問を単純にするために、クエリは都市に基づいていました。 – sunilkumarba

1

ポジション演算子はmongodbアトミック更新の内部的なものであるため、単純なアトミック更新とポジション演算子による更新の違いはありません。 C#のでは上記のmongoシェル構文の

等価は次のようになります。

var collection = database.GetCollection<Customer>("customer"); 
var searchQuery = Query.EQ("addresses.city", "New York"); 
var address = new Address() 
{ 
    street = "New street", 
    city = "New York", 
    country = "USA" 
}; 
var update = Update.Set("addresses.$", address.ToBsonDocument()) 
collection.Update(searchQuery, update, UpdateFlags.Multi); 
関連する問題