【问题标题】:How to use MongoDB's Postional Operator in C# code?如何在 C# 代码中使用 MongoDB 位置运算符?
【发布时间】:2012-03-12 01:35:01
【问题描述】:

我想在 C# 代码中使用 MongoDB 的位置运算符。这是客户的数据结构:

{ 
  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 驱动程序。

【问题讨论】:

    标签: c# mongodb positional-operator


    【解决方案1】:

    你会在 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 中是否正常工作?

    【讨论】:

    • 感谢您的回答。实际上,这不是我使用的查询。为了保持问题简单,查询是基于城市的。
    【解决方案2】:

    位置运算符是mongodb原子更新的内部东西,所以简单的原子更新和位置运算符更新没有区别。

    在 c# 中与上述 mongo shell 语法等效的是:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 2011-09-06
      • 2011-09-10
      • 2021-09-18
      • 1970-01-01
      • 2016-06-13
      • 2021-07-20
      相关资源
      最近更新 更多