【发布时间】:2018-01-14 16:18:08
【问题描述】:
我正在探索 Azure 的 cosmos mongodb,我成功创建了所有架构和种子数据。但是,当我对数据库运行测试时,它会在 Collections().UpdateOne() 中抛出“Invalid BSON Field name 'Forms.$.Amt'”,这应该更新与 id 匹配的 Forms 数组中的 Amt 字段。这适用于我在 mongodb 3.2.8 上运行的本地,并且我的应用程序使用的是 Mongodb C# driver 2.4.3
这是我的代码:
UpdateDefinition<FormEntity> updateDefinition = null;
var filter = Builders<FormEntity>.Filter
.Eq<ObjectId>(c => c.Id, id);
filter = filter & Builders<FormEntity>.Filter
.ElemMatch(c => c.Forms, c => c.Id.Equals(subFormId));
//-- add to set if not existing.
updateDefinition = Builders<FormEntity>
.Update
.Set("Forms.$.Amt", amount)
.Set("Forms.$.AmtF", amountF)
.Set(c => c.Audit.Updated, DateTime.Now);
Collection().UpdateOne(filter, updateDefinition);
架构:
{
{_id: 1},
{Type: "Data"},
Forms:
[
{_id:101, Amt:100.0, AmtF:5000.0}
],
Audit: {Updated:...}
}
我还尝试了以下所有相同的错误:
- Collection().FindAndUpdate
- .Set(c=> c.Forms[-1].Amount, amount)
【问题讨论】: