我的
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 运算符,通过嵌套字段定位对象吗?
这并不能完全回答如何将
$pull
用于嵌套对象,但在 DocumentDB 中,您可以使用下面的解决方法,您可以尝试使用 null
命令 update
将所有此类对象设置为 array positional operator
。如果需要,您可以编写额外的查询来清理这个 data
数组。
db.Data.updateOne({"data.key1.name":"test"}, {$set: { "data.$[]":null}})
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);
});