【发布时间】:2020-07-11 07:32:20
【问题描述】:
{
"_id": ObjectId("5f08e58ae1f788a8beb30519"),
"__v": NumberInt("0"),
"dimensions": {
"height": NumberInt("720"),
"width": NumberInt("1080")
},
"likes": NumberInt("164"),
"src": [
"http://mmbiz.qpic.cn/mmbiz_jpg/VZYVS8SibfiaibUE9qr4M2nGG50icSCuiaGFfUrBufC7T3R48ehjSrVSQ7JbfkgFybzjLs4tNMXhX7YmuWicPe2NUiaKQ/0",
"http://mmbiz.qpic.cn/mmbiz_jpg/VZYVS8SibfiaibUE9qr4M2nGG50icSCuiaGFfkopmyeak2h1oGPkiaHcgcg4DX5swbBHRg6TWibl2ocvpgIaAng0koWMQ/0",
"http://mmbiz.qpic.cn/mmbiz_jpg/VZYVS8SibfiaibUE9qr4M2nGG50icSCuiaGFfkxTnwtOurQQkajmtlQzIokIM0Ms6qyYh2FCWaCnZqmxOAyEYZyUgdA/0",
"http://mmbiz.qpic.cn/mmbiz_jpg/VZYVS8SibfiaibUE9qr4M2nGG50icSCuiaGFflamticYWfNkheTMtzcz3wSGib01EsurUA3Royy1A1P0W8muEicMcbbegw/0",
"http://mmbiz.qpic.cn/mmbiz_jpg/VZYVS8SibfiaibUE9qr4M2nGG50icSCuiaGFfRc3IBJE1amD5BPoELdYjoIvkQ2iaHiaUu0HexWD8niaAJq6fTFIqDgibOA/0"
],
"recommended": true
}
假设我在 mongoDB 中的集合“发现”中有上述数据结构,我想将 src 中的 http:// 替换为 https://,如下所示:
{
"_id": ObjectId("5f08e58ae1f788a8beb30519"),
"__v": NumberInt("0"),
"dimensions": {
"height": NumberInt("720"),
"width": NumberInt("1080")
},
"likes": NumberInt("164"),
"src": [
"https://mmbiz.qpic.cn/mmbiz_jpg/VZYVS8SibfiaibUE9qr4M2nGG50icSCuiaGFfUrBufC7T3R48ehjSrVSQ7JbfkgFybzjLs4tNMXhX7YmuWicPe2NUiaKQ/0",
"https://mmbiz.qpic.cn/mmbiz_jpg/VZYVS8SibfiaibUE9qr4M2nGG50icSCuiaGFfkopmyeak2h1oGPkiaHcgcg4DX5swbBHRg6TWibl2ocvpgIaAng0koWMQ/0",
"https://mmbiz.qpic.cn/mmbiz_jpg/VZYVS8SibfiaibUE9qr4M2nGG50icSCuiaGFfkxTnwtOurQQkajmtlQzIokIM0Ms6qyYh2FCWaCnZqmxOAyEYZyUgdA/0",
"https://mmbiz.qpic.cn/mmbiz_jpg/VZYVS8SibfiaibUE9qr4M2nGG50icSCuiaGFflamticYWfNkheTMtzcz3wSGib01EsurUA3Royy1A1P0W8muEicMcbbegw/0",
"https://mmbiz.qpic.cn/mmbiz_jpg/VZYVS8SibfiaibUE9qr4M2nGG50icSCuiaGFfRc3IBJE1amD5BPoELdYjoIvkQ2iaHiaUu0HexWD8niaAJq6fTFIqDgibOA/0"
],
"recommended": true
}
有没有我可以做到这一点,而无需遍历每条记录,然后一一更新? (我有数百万条记录,这需要大量时间,而且似乎效率低下......)
我试过了:
db.getCollection("discoveries").updateMany(
{ src: { $exists: true } },
[{
$set: { src: {
$replaceOne: { input: "src.$[]", find: "http://", replacement: "https://" }
}}
}]
)
返回:
[Error] Error: collection.updateOne requires update operator
【问题讨论】:
-
我认为这正是您要寻找的:stackoverflow.com/a/56556298/8296184
-
@VirgilioGM 这个解决方案有点问题, src 是一个数组而不是一个字符串,所以 $replaceOne 似乎没有这样做......
-
我现在没有电脑可以试用,抱歉,但我认为使用 'src.$[]' 作为要更新的字段会起作用
-
@VirgilioGM thx,请参阅我更新的问题。它返回:
collection.updateOne requires update operator
标签: mongodb