我正在探索Azure的cosmos mongodb,我成功创建了所有架构和种子数据。但是,当我对数据库运行我的测试时,它会抛出"无效的BSON字段名称'表单。$。Amt'"在Collections()。UpdateOne()中,应更新与数组匹配的Forms数组中的Amt字段。这适用于我在mongodb 3.2.8上的本地运行,我的应用程序使用的是Mongodb C#驱动程序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:...}
}
我还尝试了以下同样的错误:
答案 0 :(得分:1)
有同样的问题。好像CosmosDB目前不支持$ position操作符。
你必须在内存中获取整个Forms
数组,找到你想要更新的元素,在内存中更改它,然后更新整个Forms
数组。