我感觉可能没有办法做到这一点,但是这是我要完成的工作,我有很多产品要更新,如下所示:
const productsToUpdate = [
{
"imgUrls": {
"base": [
"https://files.cdn.printful.com/files/ba1/ba13faa1332b7f18ec847cb9f4d79868_preview.png"
],
"side": [
"https://files.cdn.printful.com/files/ba1/ba13faa1332b7f18ec847cb9f4d79868_preview.png"
]
},
"_id": "5dd6173cf50c1d1a40fe7c2c",
"category": "MENS",
"name": "JavaScript is Cool",
"price": "27.50"
},
{
"imgUrls": {
"base": [
"https://files.cdn.printful.com/files/ba1/ba13faa1332b7f18ec847cb9f4d79868_preview.png"
],
"side": [
"https://files.cdn.printful.com/files/ba1/ba13faa1332b7f18ec847cb9f4d79868_preview.png"
]
},
"_id": "5dd6173cf50c1d1a40fe7c2c",
"category": "MENS",
"name": "Testing",
"price": "25.50"
}
]
此数据结构与当前存储在我的数据库中的产品的数据匹配。基本上,我需要通过_id查找当前产品,并且能够更新类别,价格,imgUrls或名称或以上所有名称。
我已经做过一些研究,并且知道我可以从toUpdate arr中获取所有ID,然后进行类似
的操作Collection.update({ _id: { $in: arrOfIds }, {}, {multi: true}))
但是我不确定如何填写查询以获取正确的类别/价格/名称等。
非常感谢您提供任何指导,如果您需要更多信息,请告诉我!
答案 0 :(得分:0)
这种“大量更新”或最有效的更新方式称为bulkWrite。由于数据库中还有更多字段,并且您不想丢失它们,因此需要使用$set运算符。
const productsToUpdate = [
{
"imgUrls": {
"base": [
"https://files.cdn.printful.com/files/ba1/ba13faa1332b7f18ec847cb9f4d79868_preview.png"
],
"side": [
"https://files.cdn.printful.com/files/ba1/ba13faa1332b7f18ec847cb9f4d79868_preview.png"
]
},
"_id": "5dd6173cf50c1d1a40fe7c2c",
"category": "MENS",
"name": "JavaScript is Cool",
"price": "27.50"
},
{
"imgUrls": {
"base": [
"https://files.cdn.printful.com/files/ba1/ba13faa1332b7f18ec847cb9f4d79868_preview.png"
],
"side": [
"https://files.cdn.printful.com/files/ba1/ba13faa1332b7f18ec847cb9f4d79868_preview.png"
]
},
"_id": "5dd6173cf50c1d1a40fe7c2c",
"category": "MENS",
"name": "Testing",
"price": "25.50"
}
];
let toUupdate = product => ({
updateOne: {
"filter": { "_id": product._id },
"update": { "$set": { category: product.category, name: product.name, price: product.price } }
}
})
db.collection.bulkWrite(productsToUpdate.map(toUupdate);
console.log(updates);