当前位置: 首页 > 知识库问答 >
问题:

Azure Cosmos MongoDB"抛出无效的BSON字段名称",但它在我的本地mongob中工作

章青青
2023-03-14

我正在探索Azure的cosmos mongodb,我成功地创建了所有模式和种子数据。但当我试图对数据库运行测试时,它会在Collections()中抛出“Invalid BSON Field name'Forms.$.Amt'”。UpdateOne(),它应该更新表单数组中与id匹配的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:...}
    }

我还尝试了以下所有相同的错误:

  • 集合()。查找和更新
  • 。集合(c)=

共有1个答案

商天逸
2023-03-14

我也有同样的问题。似乎CosmosDB目前不支持$positional操作符。

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

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

 类似资料:
  • 我在MongoDB文档模型上使用Azure CosmoDB,并且在使用DBRefs$id更新一些文档时遇到奇怪的行为 看看这个脚本示例: 然后返回: 如果有人知道发生了什么,我真的很感激。

  • 此例外情况: 由以下代码引发: 注释代码

  • 问题内容: 例外情况: 由以下代码引发: 注释的代码执行正常。 为什么在“ upsert”不正确的情况下插入是正确的? 问题答案: 使用更新运算符更新文档字段。您需要哪个带替换文件。 这里更多 更新操作员:https : //docs.mongodb.com/manual/reference/operator/update- field/ 更新一:https : //docs.mongodb.co

  • 问题内容: 我正在为我的应用程序使用Hibernate 3.2.5。 我有一张桌子和一张桌子。 部门java 员工.java HBM映射文件 以下是本机SQL的代码: 我得到了例外: 当我直接在数据库中运行查询时,我会得到正确的输出,但是在hibernate状态下,它给出的是。我已经确认列名仅是正确的。 请让我知道如何解决此问题。 问题答案: 您的映射中包含以下内容: 但是您的sql 和之间没有这

  • 我正在尝试创建一个方法,对象被传递到该方法,并读取所有字段,以便为null且为String的字段被赋予“”的值。 现在问题出现在我的课堂上。我有这个模型: 我做了这个方法:private ObjectMapper obMapper=new ObjectMapper();

  • 我的应用程序中堆满了spring boot,它不想运行模式或表,只想连接到我的数据库SQL Server和查询信息,所以我在文件application.properties中禁用了这一行 但是不工作,我不知道什么是错的,已经配置了我的数据源,提前谢谢,我希望有人能帮助我,对不起我的英语很差。 我使用的是spring boot 2.2.6,我的DataSourceConfiguration代码 这里