javascript - node.js mongodb .. (不可变)字段 '_id' 被发现已被更改

标签 javascript node.js mongodb

当我尝试用新对象(从 xml 文件解析)插入对象时遇到一些问题,但出现以下错误:

 MongoError: exception: After applying the update to the document {_id: ObjectId('55be3c8f79bae4f80c6b17f8') , ...}, the (immutable) field '_id' was found to have been altered to _id: ObjectId('55be5f15ae
5597401724aab3')

这是我的代码:

xmlFile.product_list.product.forEach(function (product) {

                    var productEntity = new Product({
                        product_id: parseInt(product.id),
                        parent_id: parseInt(product.parent_id),
                        sku: product.sku,
                        title: product.title,
                        pricenormal: parseFloat(product.price_normal),
                        pricewholesale: parseFloat(product.price_wholesale),
                        pricewholesalelarge: parseFloat(product.price_wholesale_large),
                        pricesale: parseFloat(product.price_sale),
                        weight: parseFloat(product.weight),
                        volume: parseFloat(product.volume),
                        unittype: product.unit_type,
                        status: product.status,
                        datecreating: product.datecreating,
                        sp: product.sp,
                        guaranteeext: product.guarantee_ext,
                        used: product.used,
                        statusfull: product.status_full,
                        description: null,
                        url: null
                    });
                    items.push(productEntity);

                });


items.forEach(function (product) { //update or create new products

                    Product.findOneAndUpdate({product_id: product.product_id}, product, {upsert: true}, function (err) {
                        if (err)  return updateDBCallback(err);
                        updateDBCallback(null, 'saved');

                    });

                });

我尝试使用以下提示:

                //product._id = mongoose.Types.ObjectId(); //doesn't work
                //delete product._id // doesn't delete _id from product

但他们没有帮助。 所以我不想更新我的 product._id ,我只想更新其他字段。

最佳答案

当您执行 new Product() 时,会生成一个新的 _id 以及其他内容。试试这个:

items.forEach(function (product) { //update or create new products

  // Es6 assign
  var productToUpdate = {};
  productToUpdate = Object.assign(productToUpdate, product._doc);
  delete productToUpdate._id;

  Product.findOneAndUpdate({product_id: product.product_id}, productToUpdate, 
                         {upsert: true}, function (err) {
    if (err)  return updateDBCallback(err);
       updateDBCallback(null, 'saved');

  });

});

关于javascript - node.js mongodb .. (不可变)字段 '_id' 被发现已被更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31775150/

相关文章:

javascript - 如何使用 javascript/jquery 从数组中过滤单个数据?

node.js - NodeJS v12 重新启用 TLS 1.1 和 1.0

javascript - 如何从第三方api保存json对象

angularjs - 将文件流式传输到S3 "Error: stream ended unexpectedly"

javascript - MongoDb 从字符串运行命令

java - 在 MongoDB Java 驱动程序中聚合时解析数据类型

javascript - 无法使用 selenium webdriver 在 nightwatch.js 中执行按钮单击

javascript - 如何检查 Javascript 中的所有字母字符(包括特殊字符)?

javascript - ajax(PHP 和 Javascript)出现问题 - 如何正确传输?

javascript - 获取HTML页面与node-xmpp/xmpp服务器通信