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