(AZURE cosmosDB/mongoDB) 更新数组中对象的特定元素的字段

Posted

技术标签:

【中文标题】(AZURE cosmosDB/mongoDB) 更新数组中对象的特定元素的字段【英文标题】:(AZURE cosmosDB/mongoDB) Update fields of an specific element of an object in an array 【发布时间】:2017-12-16 20:44:31 【问题描述】:

    "_id" : ObjectId("59660d4099c1e682e0992ced"),
    "alpha" : [
        
            "_id" : ObjectId("59660d4199c1e682e0992cee"),
            "number" : 1,
            "start_at" : ISODate("2017-07-12T11:51:28.895Z"),
            "end_at" : ISODate("2017-08-12T11:51:28.895Z"),
            "created_at" : ISODate("2017-07-12T11:51:29.346Z"),
            "updated_at" : null
        
    ]

我有一个如上所述的文档,我想更新或更改“alpha”数组的 JSON 元素中的“number”和“updated_at”字段。

我试过这个:

db.mycol.update(_id: ObjectId("59660d4099c1e682e0992ced"), alpha: $elemMatch: _id: ObjectId("59660d4199c1e682e0992cee"), $set: "alpha.$.number": 2, "alpha.$.updated_at": new Date())

在普通的 mongodb 服务器上运行良好。 但是对于 azure cosmosdb/mongodb,它说好的,但并没有真正更新文档。我做错了什么?

【问题讨论】:

Prataksha,你找到解决办法了吗? 好吧,首先我获取了整个 alpha 数组,然后我遍历它并更改我想要更改的数据。最后,在我完成之后,我再次$set alpha 数组,其中包含一个新的更新值。我知道它不会像 findAndModify 那样完全原子,但现在它可以完成这项工作。等待 AZURE 的全力支持。 【参考方案1】:

更新或更改 'alpha' 数组的 JSON 元素中的字段 'number' 和 'updated_at'

并非所有 MongoDB 的查询语法/功能都在 Azure Cosmos DB:MongoDB API 中实现。 Based on my test, Azure Cosmos DB: MongoDB API 现在好像不支持Array Update,以后会支持这个功能。

如果可能,您可以在User Voice 上创建一个项目以提供反馈。

【讨论】:

请注意,我们在支持的 CRUD 和查询操作方面取得了更多进展,上表目前并未反映支持/将支持。正如 Fred 所指出的,对于任何似乎尚未实现的查询语法和功能,请务必通过 Azure Cosmos DB Mongo API User Voice 提供反馈。 @DennyLee 是否有关于 Azure Cosmos Db 支持和不支持 Mongo API 的哪些功能的文档? 目前还没有,虽然我们正在努力,很快就会发布。 @DennyLee 显然不是。 @DennyLee 所以你要求人们投票是否愿意实现基本语法?现在,这有多好笑?

以上是关于(AZURE cosmosDB/mongoDB) 更新数组中对象的特定元素的字段的主要内容,如果未能解决你的问题,请参考以下文章

CosmosDB MongoDB 适配器投影不起作用

CosmosDB MongoDB API:新查询被隐藏

CosmosDB mongoDB API 排序和全文搜索抛出错误

Azure 仅允许通过 azure *** 访问 azure 门户

为啥不能配置 Azure 诊断以通过新的 Azure 门户使用 Azure 表存储?

Azure.Cosmos 还是 Microsoft.Azure.Cosmos、Azure.Storage.Blob 还是 Microsoft.Azure.Storage.Blob?适用于 .NET C