mongodb - MongoDB更新问题
问题描述
我有照片集,其中有 5000 个这样的文件:
{
"id": 1.0,
"albumId": 1.0,
"title": "accusamus beatae ad facilis cum similique qui sunt",
"url": "http://placehold.it/600/92c952",
"thumbnailUrl": "http://placehold.it/150/92c952"
},
...
{
"_id": 5000.0,
"albumId": 9.0,
"title": "reprehenderit est deserunt velit ipsam",
"url": "http://placehold.it/600/771796",
"thumbnailUrl": "http://placehold.it/150/771796"
}
我尝试更新 mongoshell 上的 url 和 thumbnailUrl 字段,如下所示。在 pics 数组中取一个随机值,包括 100 个值,然后更新照片集合中每个文档的 url 和 thumbnailUrl 字段:
var pics = [
'https://unsplash.com/photos/IGmMRSuh6Qo',
'https://unsplash.com/photos/t4mQXex4Peo',
...
'https://unsplash.com/photos/bjDpgPvCcM0',
'https://unsplash.com/photos/6cmZLC4Tq9s'
];
var rd = (cb)=>{
return cb(pics[Math.floor((Math.random() * 100) + 1)]);
}
for(var i=1;i<=5000;i++){
rd((res)=>{db.getCollection('photos').updateOne({"_id":i},{$set:
{"url":res,"thumbnailUrl":res}});})
}
输出:有许多文档具有 url 值,并且 thumbnailURL 字段未定义。
需要输出:所有 5000 个文档都应更新为 url 和 thumbnailUrl 字段的新值。没有文档在 url 和 thumbnailUrl 字段中具有未定义的值。
如果我取 10 到 1 之间的随机值,则输出正常。但是当我取 100 到 1 之间时就不行了。我认为这是异步问题。
我通过这个链接收集了照片: https ://jsonplaceholder.typicode.com/photos
然后我像这样制作图片数组:
[
'https://unsplash.com/photos/IGmMRSuh6Qo',
'https://unsplash.com/photos/t4mQXex4Peo',
'https://unsplash.com/photos/WF2lvywxdMM',
'https://unsplash.com/photos/gnm2op0m2pw',
'https://unsplash.com/photos/woP_9Ps2RWY',
'https://unsplash.com/photos/XSbJiHcPUAk',
'https://unsplash.com/photos/9KkpIPFWIeM',
'https://unsplash.com/photos/XpqRnutVWCM',
'https://unsplash.com/photos/u535hc1fR8w',
'https://unsplash.com/photos/e3Xfmhfbxj4',
'https://unsplash.com/photos/jNpttMRlb_Y',
'https://unsplash.com/photos/4TET084JWaA',
'https://unsplash.com/photos/EeN8KSwYMjw',
'https://unsplash.com/photos/sYIqGW3hufI',
'https://unsplash.com/photos/tgmGOhXVuoI',
'https://unsplash.com/photos/nYugmV-SY6s',
'https://unsplash.com/photos/f5Y_m2bD_Tw',
'https://unsplash.com/photos/MEZDyn98La8',
'https://unsplash.com/photos/peFXR4binOk',
'https://unsplash.com/photos/SurmPrJ4Rts',
'https://unsplash.com/photos/h-dR-XFJXis',
'https://unsplash.com/photos/-LTxAmtpI5g',
'https://unsplash.com/photos/7bVMdNYzH_8',
'https://unsplash.com/photos/h8wi7UONunE',
'https://unsplash.com/photos/DmUbkltYsKI',
'https://unsplash.com/photos/aEnH4hJ_Mrs',
'https://unsplash.com/photos/FTW8ADj5igs',
'https://unsplash.com/photos/S2YssLw97l4',
'https://unsplash.com/photos/P8M_y-uI3gs',
'https://unsplash.com/photos/1rrCIeGUtcM',
'https://unsplash.com/photos/RBouLnm0L0Q',
'https://unsplash.com/photos/soyhgESoGVc',
'https://unsplash.com/photos/PUVgHyBgZn8',
'https://unsplash.com/photos/CEa3F_sPvqg',
'https://unsplash.com/photos/fJzmPe-a0eU',
'https://unsplash.com/photos/70RHiKO9kj8',
'https://unsplash.com/photos/n2WHxdFtIXU',
'https://unsplash.com/photos/cqrEoS9hRBc',
'https://unsplash.com/photos/cwz9_Pqd8Zs',
'https://unsplash.com/photos/BJAKGX0-9_s',
'https://unsplash.com/photos/hw_sKmjb0ns',
'https://unsplash.com/photos/Pn0XP2Klbcw',
'https://unsplash.com/photos/XsmfoZl6a8Q',
'https://unsplash.com/photos/6vwrVGrxOKE',
'https://unsplash.com/photos/8WODX7nO2JE',
'https://unsplash.com/photos/FWOGqSKq_Cs',
'https://unsplash.com/photos/s_IYpaTaueQ',
'https://unsplash.com/photos/pTrHHGrxeOE',
'https://unsplash.com/photos/xI_-wFJhCiM',
'https://unsplash.com/photos/JckbjvEWQts',
'https://unsplash.com/photos/hDkHSqzGFCA',
'https://unsplash.com/photos/wcNyOYH0_kY',
'https://unsplash.com/photos/0Hf3SuP-Muc',
'https://unsplash.com/photos/8ziKncAPUpY',
'https://unsplash.com/photos/iJY-h1wEMK4',
'https://unsplash.com/photos/FGESRgJ-Aog',
'https://unsplash.com/photos/LmFV2vafmS0',
'https://unsplash.com/photos/GSf90gw9YHw',
'https://unsplash.com/photos/bjDpgPvCcM0',
'https://unsplash.com/photos/6cmZLC4Tq9s',
'https://unsplash.com/photos/WCz-Kp72lpU',
'https://unsplash.com/photos/N7WPtFds0nU',
'https://unsplash.com/photos/qF1oacfAqnI',
'https://unsplash.com/photos/29skLU6lfjo',
'https://unsplash.com/photos/Ixzs6GZwdtY',
'https://unsplash.com/photos/MKd7hcKA4m0',
'https://unsplash.com/photos/NIQ52qeXOBU',
'https://unsplash.com/photos/ush_7RsBAGM',
'https://unsplash.com/photos/KjOTbIIov44',
'https://unsplash.com/photos/tzfdoTi8e2E',
'https://unsplash.com/photos/0Idgp07w-PA',
'https://unsplash.com/photos/8NkBqUQ-nYc',
'https://unsplash.com/photos/TkVqmu1QUSk',
'https://unsplash.com/photos/npk8586on_I',
'https://unsplash.com/photos/4Um0IDn_ax4',
'https://unsplash.com/photos/t--j8FnOUrY',
'https://unsplash.com/photos/1VEVJrBF94U',
'https://unsplash.com/photos/jKvwtbrxzdY',
'https://unsplash.com/photos/--LyFIjXoFY',
'https://unsplash.com/photos/Qdr4mpifNQQ',
'https://unsplash.com/photos/vAD5mhU9JUk',
'https://unsplash.com/photos/D8LcRLwZyPs',
'https://unsplash.com/photos/H5yiRXDUkto',
'https://unsplash.com/photos/_0EALGr5NBs',
'https://unsplash.com/photos/2xCQuiEmBcg',
'https://unsplash.com/photos/0tkmbWNLm9E',
'https://unsplash.com/photos/2xCQuiEmBcg',
'https://unsplash.com/photos/0tkmbWNLm9E',
'https://unsplash.com/photos/yI-GZRkbJ08',
'https://unsplash.com/photos/vVyzufditLQ',
'https://unsplash.com/photos/eHXtoxL1H-E',
'https://unsplash.com/photos/c7qvP413OVU',
'https://unsplash.com/photos/yi9Oytqu5hg',
'https://unsplash.com/photos/nTinYg604lE',
'https://unsplash.com/photos/4KroYsZEfio',
'https://unsplash.com/photos/174ZYtxCtr4',
'https://unsplash.com/photos/4hHLKxPtTfQ',
'https://unsplash.com/photos/cMC_s7e150o',
'https://unsplash.com/photos/pNH6_AOXTnU',
'https://unsplash.com/photos/Ul07QK2AR-0'
]
解决方案
您可以使用forEach逐个更新文档。据我了解您的问题是您想使用数组的随机元素更新您的字段,那么您可以按如下方式进行操作:
var pics = [
'https://unsplash.com/photos/IGmMRSuh6Qo',
'https://unsplash.com/photos/t4mQXex4Peo'
]
function random() {
return (pics[Math.floor(Math.random()*pics.length)]);
}
db.COLLECTION_NAME.find().forEach( function(myDoc) {
const res = random()
db.getCollection("COLLECTION_NAME").update({ _id: ObjectId(myDoc._id) }, {
$set: {
"YOUR_FIELD_NAME": res
}
})
} );
希望对你有效。
推荐阅读
- html - Flexbox:响应式列布局
- c - C 编程语言如何不应用 OOP 概念?
- javascript - 如何诊断我网站上的性能问题
- c++ - 为什么不专门化功能模板?(问答)
- javascript - 如何创建两个异步函数,等待 10 秒后返回 javascript 中任意数量参数的总和
- html - 标题 EJS 部分有结束标签,但网站仍然有效
- android - 安卓手机同时连接两台蓝牙设备进行音频传输
- javascript - 如何根据javascript中的关键属性获取两个对象数组之间的差异
- powerbi - power bi:如何将参数添加到为电子邮件订阅生成的链接中
- r - 对 RStudio 中的“工具未安装或不在 PATH:ghostcript”警告进行故障排除