Mongoose中的多文档上传

你好,这里是我的问题,

var poolSchema = mongoose.Schema({ "topic_id": { type: Number, default: null, required: true }, "document_id": { type: String, default: null, required: true }, "project":{ type:String, default: false, required: true }, "createddate":{ type:Date, default : Date.now } }, { collection: "sorguHavuzu" }); 

我有一个池文件的数组,每个项目具有不同的字段值,如下所示:

 var poolItems = [ {document_id :"FBIS3-50136" ,topic_id :"301" , project :"A1"}, {document_id :"LA040190-0178" ,topic_id :"302" , project :"A1"}, {document_id :"FT934-5418" ,topic_id :"303" , project :"A1"}, {document_id :"LA071090-0047" ,topic_id :"304" , project :"A1"}] 

这是我的计划:

我想通过document_id字段来插入数组中的项目。 所以这里是我的更新操作。

 var query = {"document_id" : { $in:["FBIS3-50136","LA040190-0178","FT934-5418","LA071090-0047"]}}; Pools.collection.update(query, { $push : { "$ROOT" : poolItems } }, { upsert: true, multi : true}, callback); 

错误:在$'ROOT \'中的美元($)前缀字段\'$ ROOT \'对于存储无效。

但在每一个尝试,我有不同的错误,有没有办法使用mongoose更新操作的项目? 谢谢

在这里提到的批量upsert是不可能的,以及一个可能的解决scheme。

然而,你可以考虑使用更简单的方法来为每个poolItems使用upsert操作,或者像每个一样使用一些asynchronous方法。 下面的代码应该可以工作:

 var async = require('async'); var Pool = require('/path/to/pool.js'); var poolItems = [ {document_id :"FBIS3-50136" ,topic_id :"301" , project :"A1"}, {document_id :"LA040190-0178" ,topic_id :"302" , project :"A1"}, {document_id :"FT934-5418" ,topic_id :"303" , project :"A1"}, {document_id :"LA071090-0047" ,topic_id :"304" , project :"A1"}]; async.each(poolItems, function(poolItem, callback){ Pool.findOneAndUpdate({document_id: poolItem.document_id}, poolItem, {upsert:true}, function(err, doc){ if(err){ return callback(err); } return callback(); }); }, function(err){ if(err){ console.log(err); } else{ console.log("All pool items have been upserted!") } });