Azure Cosmos MongoDB"引发无效的BSON字段名称"但它适用于我当地的mongodb

时间:2018-01-14 16:18:08

标签: mongodb azure-cosmosdb

我正在探索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:...}
    }

我还尝试了以下同样的错误:

  • 集()。FindAndUpdate
  • .Set(c =&gt; c.Forms [-1] .Amount,amount)

1 个答案:

答案 0 :(得分:1)

有同样的问题。好像CosmosDB目前不支持$ position操作符。

https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/20091454-positional-array-update-via-query-support

你必须在内存中获取整个Forms数组,找到你想要更新的元素,在内存中更改它,然后更新整个Forms数组。