gpt4 book ai didi

node.js - Mongoose 更新或插入许多文件

转载 作者:可可西里 更新时间:2023-11-01 10:08:46 26 4
gpt4 key购买 nike

我正在尝试使用最新版本的 mongoose 插入对象数组,或者在相应的产品 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: ''
},
{ ... },
{ ... }
]

最佳答案

你基本上需要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
}
})
)
)

关于node.js - Mongoose 更新或插入许多文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54714148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com