2012-02-21 37 views
3

我想在C#代碼中使用MongoDB的位置運算符。下面是客戶的數據結構:如何在C#代碼中使用MongoDB的Postional運算符?

{ 
    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 shell中正確工作?

+0

感謝您的回答。實際上,這不是我使用的查詢。爲了簡化問題,查詢基於城市。 – sunilkumarba 2012-02-22 08:38:54

1

位置運算符是mongodb原子更新的內部事物,所以簡單原子更新和位置運算符更新沒有區別。在C#

相當於上述蒙戈外殼的語法是:

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); 
相關問題