【问题标题】:Azure Cosmos MongoDB "Throws Invalid BSON Field name" but it works in my local mongodbAzure Cosmos MongoDB“抛出无效的 BSON 字段名称”,但它在我的本地 mongodb 中有效
【发布时间】: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)

【问题讨论】:

    标签: mongodb azure-cosmosdb


    【解决方案1】:

    遇到了同样的问题。似乎 CosmosDB 目前不支持 $ 位置运算符。

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 2021-01-13
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 2018-04-10
      • 2018-10-07
      相关资源
      最近更新 更多