【发布时间】:2015-07-16 12:05:44
【问题描述】:
编辑: 不寻找这样做的javascript方式。我正在寻找执行此操作的 MongoDB C# 2.0 驱动程序方式(我知道这可能是不可能的;但我希望有人知道解决方案)。
我正在尝试更新嵌入在我的 mongodb 主文档上的数组中的项目的值。
我正在寻找一种强类型的方法来做到这一点。我正在使用Mongodb c# 2.0 driver
我可以通过弹出元素,更新值,然后重新插入来做到这一点。这感觉不对;因为我正在覆盖在此期间可能已经写入的内容。
这是我迄今为止尝试过但没有运气的方法:
private readonly IMongoCollection<TempAgenda> _collection;
void Main()
{
var collectionName = "Agenda";
var client = new MongoClient("mongodb://localhost:27017");
var db = client.GetDatabase("Test");
_collection = db.GetCollection<TempAgenda>(collectionName);
UpdateItemTitle(1, 1, "hello");
}
public void UpdateItemTitle(string agendaId, string itemId, string title){
var filter = Builders<TempAgenda>.Filter.Eq(x => x.AgendaId, agendaId);
var update = Builders<TempAgenda>.Update.Set(x => x.Items.Single(p => p.Id.Equals(itemId)).Title, title);
var result = _collection.UpdateOneAsync(filter, update).Result;
}
【问题讨论】:
-
@BlakesSeven 这不是 c# 问题吗?
-
还是一样的原理。匹配查询部分中的数组元素并在更新部分中使用位置
$运算符。我不是随便从袋子里拿出来的。 -
@BlakesSeven 我可以阅读 mongo 文档并使用纯 javascript 进行操作,但是,正如我在问题中所述,我正在寻找一种强类型的方法来执行此操作,并且据我所知嵌入我的 C# 代码中的 javascript 字符串不是强类型的。
-
still 是 C# 的位置运算符。它不是“javascript 字符串”,而是“点表示法”,适用于所有语言。