我正在尝试使用最新版本的猫鼬插入对象数组,或者如果已经存在相应的产品ID,则进行更新。我无法终生找出正确的使用方法(bulkWrite,updateMany等),而且似乎也无法弄清楚语法而不会出错。例如,我正在尝试
Product.update({}, products, { upsert : true, multi : true }, (err, docs) => console.log(docs))
这会引发错误DeprecationWarning: collection.update is deprecated. Use updateOne, updateMany, or bulkWrite instead. MongoError: '$set' is empty. You must specify a field like so: {$set: {<field>: ...}
并使用updateMany只会给我$ set错误。我似乎找不到使用此方法的任何示例,只是想知道是否有人可以为我提供如何正确使用此方法的示例。
为清楚起见,我生成了一个对象数组,然后将它们插入到数据库中,或者更新条目(如果已经存在)。我要匹配的字段称为pid
。任何提示或建议,将不胜感激!
编辑:
我的产品架构
const productSchema = new mongoose.Schema({
title : String,
image : String,
price_was : Number,
price_current : {
dollars : String,
cents : String
},
price_save_percent : String,
price_save_dollars : String,
price_save_endtime : String,
retailer : String
})
const Product = mongoose.model('Product', productSchema)
正在传递products
数组的示例
[
{
title: 'SOME PRODUCT',
image: '',
price_was: '139.99',
price_current: { dollars: '123', cents: '.49' },
price_save_percent: '12%',
price_save_dollars: '16.50',
price_save_endtime: null,
pid: 'VB78237321',
url: ''
},
{ ... },
{ ... }
]
答案 0 :(得分:1)
您基本上需要进行bulkWrite
操作
您要使用
更新的数组const products = [
{
title: 'SOME PRODUCT',
image: '',
price_was: '139.99',
price_current: { dollars: '123', cents: '.49' },
price_save_percent: '12%',
price_save_dollars: '16.50',
price_save_endtime: null,
pid: 'VB78237321',
url: ''
}
]
查询批量更新
Model.bulkWrite(
products.map((product) =>
({
updateOne: {
filter: { retailer : product.pid },
update: { $set: product },
upsert: true
}
})
)
})