使用 $pull 运算符通过嵌套字段从 DocumentDB 的数组中删除对象?

问题描述 投票:0回答:2

我的

Data
收藏中有一篇条目如下:

{
    "data": [
        {
            "key1": {
                "name": "test"
            }
        },
        {
            "key1": {
                "name": "test2"
            }
        }
    ]
}

我想从

key1.name: 'test2'
数组中删除
data
的对象。

我尝试过以下方法:

db.Data.updateOne({}, { $pull: { 'data': { 'key1.name': 'test2' } } })

这在 mongodb(最新)的容器实例中运行良好。

但是在引擎版本为5.0的DocumentDB中,它不起作用并返回

MongoServerError: Dotted field name is not valid for storage

我有什么方法可以在 DocumentDB 中使用 $pull 运算符,通过嵌套字段定位对象吗?

javascript node.js mongodb aws-documentdb aws-documentdb-mongoapi
2个回答
0
投票

这并不能完全回答如何将

$pull
用于嵌套对象,但在 DocumentDB 中,您可以使用下面的解决方法,您可以尝试使用
null
命令
update
将所有此类对象设置为
array positional operator
。如果需要,您可以编写额外的查询来清理这个
data
数组。

db.Data.updateOne({"data.key1.name":"test"}, {$set: { "data.$[]":null}})

0
投票

DocumentDB 是 MongoDB 的模拟,可能不支持 MongoDB 中的所有功能。

目前的解决方法之一是使用

$filter
过滤
data
数组并更新回集合。

db.collection.aggregate([
  {
    "$match": {
      "data.key1.name": "test2"
    }
  },
  {
    $set: {
      "data": {
        "$filter": {
          "input": "$data",
          "as": "d",
          "cond": {
            $ne: [
              "$$d.key1.name",
              "test2"
            ]
          }
        }
      }
    }
  }
]).forEach(function( result ) {
   db.collection.save(result);
});

蒙戈游乐场

© www.soinside.com 2019 - 2024. All rights reserved.