Mongoose - InsertMany方法,upsert:true?

时间:2017-01-14 00:01:19

标签: javascript mongodb mongoose bulkinsert upsert

我正在使用Mongoose .insertMany方法用一组对象填充imagesSchema。

想知道如何使用upsert:如果使用.insertMany()或其他方法来更新/删除所有对象,以防第二次运行此函数。

另外,我们如何禁用默认MongoDB ObjectID的生成和_v?

const imagesSchema = new mongoose.Schema( { catalogue: String, productID: String, position: Number, id: Number, name: String, alttag: String, file: String, type: String, saved: String, status: String }, { collection: "images", _id: false, upsert: true } ); //things that do not work imagesSchema.plugin(uniqueValidator); const Images = mongoose.model("Images", imagesSchema); module.exports = Images;

Code

Catalogue.findOne({ domain: userApiProducts.domain }, "allProducts", function( err, products ) { if (err) console.error(err); (function() { var productsARR = []; var productsOBJ = { data: [] }; new Promise(function(resolve, reject) { resolve(); }) .then(function() { var id = 0; products.allProducts.forEach(function(x) { var catalogueID = x._id; for (var i = 0; i < x.media_gallery_entries.length; i++) { var filename = x.media_gallery_entries[i].file; function type() { return filename .substr((~-filename.lastIndexOf(".") >>> 0) + 2) .toUpperCase(); } id++; productsARR.push({ catalogue: products._id, productID: x._id, position: x.media_gallery_entries[i].position, id: id, name: x.name, alttag: x.media_gallery_entries[i].label, file: x.media_gallery_entries[i].file, type: type(), saved: "0.00 KB", status: "SYNCING" }); } }); if (productsARR.length === productsARR.length) { productsOBJ.data = productsARR; var arr = productsOBJ.data; Images.insertMany(arr, function(error, docs) {}); } }) .catch(function(e) { console.log(e); }); })(); });

Output

{ "_id" : ObjectId("58795c440d5e554357bfb155"), "__v" : 0, "catalogue" : "5879356f8d94cf6a32cd7536", "productID" : "58795c440d5e554357bfb143", "position" : 2, "id" : 17, "name" : "Al treilea", "alttag" : null, "file" : "/g/r/grafolio_angel_and_devil_thumbnail_1_1_1_3_3_3.jpg", "type" : "JPG", "saved" : "0.00 KB", "status" : "SYNCING" }, { "_id" : ObjectId("58795c440d5e554357bfb153"), "__v" : 0, "catalogue" : "5879356f8d94cf6a32cd7536", "productID" : "58795c440d5e554357bfb142", "position" : 2, "id" : 15, "name" : "Al treilea", "alttag" : null, "file" : "/g/r/grafolio_angel_and_devil_thumbnail_1_1_1_1.jpg", "type" : "JPG", "saved" : "0.00 KB", "status" : "SYNCING" } //etc

{{1}}

输出正确但我需要:

  • 找到一种方法来使用upsert:true或查找并删除所有项目......
  • 禁用ObjectID生成
  • 禁用_v生成

希望有人已经开始研究类似的东西并为此找到了完美的解决方案!

0 个答案:

没有答案