Mongodb Mongo-查找包含点的键的记录

Mongodb Mongo-查找包含点的键的记录,mongodb,mongodb-query,Mongodb,Mongodb Query,Mongo不允许文档的键中有点(请参阅或) 然而,我们有一个巨大的mongo数据库,其中一些文档的键中确实包含点。这些文件的格式如下: { "_id" : NumberLong(2761632), "data" : { "field.with.dots" : { ... } } } 我不知道这些记录是怎么插入的。我怀疑我们一定在某个时候将check\u keysmongod选项设置为false 我的目标是找到有问题的文档,更新它们并删除这些点。我还没有找

Mongo不允许文档的键中有点(请参阅或)

然而,我们有一个巨大的mongo数据库,其中一些文档的键中确实包含点。这些文件的格式如下:

{
    "_id" : NumberLong(2761632),
    "data" : {
        "field.with.dots" : { ... }
    }
}
我不知道这些记录是怎么插入的。我怀疑我们一定在某个时候将
check\u keys
mongod选项设置为false

我的目标是找到有问题的文档,更新它们并删除这些点。我还没有找到如何执行搜索查询。以下是我迄今为止所做的尝试:

  • db.collection.find({“data.field.with.dots”:{$exists:true})
  • db.collection.find({“data.field\uff0ewith\uff0edots”:{$exists:true})
您可以使用以键和值的形式获取
数据。然后,您可以使用with检查是否有
键在其中。在下一步中,您可以使用筛选出剩余数组为空(没有带点的字段)的文档,请尝试:


所以最后你想得到这样的东西:
{“\u id”:NumberLong(2761632),“data”:{“fieldwithdots”:{…}}}
?我只想找到
{“\u id”:NumberLong(xxx),“data:{“field.with.dots”:{…}}
表单的所有记录。一旦发现,我可以更新它们以删除点或用其他东西替换它们。
db.col.aggregate([
    {
        $addFields: {
            dataKv: {
                $filter: {
                    input: { $objectToArray: "$data" },
                    cond: {
                        $ne: [ { $indexOfBytes: [ "$$this.k", "." ] } , -1 ]
                    }
                }
            }
        }
    },
    {
        $match: {
            $expr: {
                $ne: [ { $size: "$dataKv" }, 0 ]
            }
        }
    },
    {
        $project: {
            dataKv: 0
        }
    }
])