【发布时间】:2021-07-31 15:35:41
【问题描述】:
我已插入 100k 条记录,已成功批量上传记录。但是,如果我使用bulk.insert(doc),则默认值不会使用 mongoose 和 Nodejs 插入。像 createdAt 和 updatedAt 字段作为默认值未插入。我试图添加选项 setDefaultsOnInsert: true bulk.insert 没有添加值的选项。目前,我添加了我的代码。请帮助我提前。
代码
let data = req.body;
var bulk = callDispositionModel.collection.initializeOrderedBulkOp();
var counter=0
data.forEach(doc1 => {
bulk.insert(doc1);
if (counter % 5000 == 0) {
bulk.execute();
bulk = callDispositionModel.collection.initializeUnorderedBulkOp();
counter = 0;
}
counter++
})
if (counter > 0) {
bulk.execute(function(err,result) {
if(err){
console.log(`err `, err)
}else{
console.log(`result `, result)
return res.send({success: true, message:'data uploaded successfully')
}
});
}
架构或模型
let dispositionSchema = new mongoose.Schema({
name : {type: String, default: null},
mobile : {type : String, default: null},
remarks : {type: String, default:null},
duration: {type : String, default: null},
amount : {type : Number, default: 0},
date : {type : String, default: null},
time : {type : String, default: null},
createdAt: {type: Date, default: Date.now },
updatedAt: {type: Date, default: Date.now }
});
const disposition = mongoose.model('disposition', dispositionSchema);
export default disposition;
数据
在mongodb中插入数据
{
"_id" : ObjectId("6098e6d007e2804b9c1f8317"),
"name" : "senthil",
"amount" : 0
}
{
"_id" : ObjectId("6098e6d007e2804b9c1f8316"),
"name" : "periyas",
"amount" : 0
}
但是,我已经预料到了输出
预期数据
{
"_id" : ObjectId("6098e6d007e2804b9c1f8317"),
"name" : "senthil",
"amount" : 0,
"mobile" : null,
"remarks" : null,
"createdAt": "2021-05-07T13:55:34.233Z"
},
{
"_id" : ObjectId("6098e6d007e2804b9c1f8316"),
"name" : "periyas",
"mobile" : null,
"remarks" : null,
"createdAt": "2021-05-07T13:55:34.233Z"
}
【问题讨论】:
-
可以显示架构吗?您是否在架构选项中定义了时间戳:true?
-
@turivishal 是的,我更新了架构,请立即查看
-
查看answer 如何在架构中启用自动时间戳,您不必在架构中添加 createdAt 和 updatedAt 字段,只需删除这两个字段即可。
-
@turivishal,我已经启用了
timestamps: true无效。另一个remarks字段未存储在默认值中。 -
你使用的是什么 npm
mongoose或mongodb,什么版本?
标签: node.js mongodb express mongoose bulkinsert